2016-09-27 3 views
1

Я сохраняю DataFrame с помощью to_csv(), а затем извлекаю его с помощью csv_read(), и он возвращается с другим типом данных.Как сохранить pd.read_csv() от изменения типа данных

df1i=['00','01'] 
df1=pd.DataFrame(columns=['00','01'],index=df1i) 
df1 
df1.iloc[0,0]=([11, 22]) 
df1 
print((df1.iloc[0,0])) 
print(type(df1.iloc[0,0])) 
print(df1.iloc[0,0][0]) 
print(type(df1.iloc[0,0][0])) 
df1.to_csv('C:\Thomas\paradigm\\df1.csv') 
df1=pd.read_csv('c:\\Thomas\\paradigm\\df1.csv',index_col=0) 
print((df1.iloc[0,0])) 
print(type(df1.iloc[0,0])) 
print(df1.iloc[0,0][0]) 
print(type(df1.iloc[0,0][0])) 

[11, 22] 
<class 'list'> 
11 
<class 'int'> 
[11, 22] 
<class 'str'> 
[ 
<class 'str'> 

Если кто-нибудь может сказать мне, как контролировать это, я буду признателен.

Разъяснение мой вопрос >>>

То, что я спрашиваю, есть ли способ вернуть тот же тип, что вы положили в. Например, если входной элемент в виде целого числа, речь идет назад как строка, ndarray также возвращается в виде строки.

ответ

1

Немного странно хранить списки как элементы DataFrame, но если это то, что вам нужно сделать, подумайте об использовании конвертера вместе с ast.literal_eval, чтобы получить список обратно.

import pandas as pd 
import ast 


df1i = ['00', '01'] 
df1=pd.DataFrame(columns=['00','01'],index=df1i) 
df1.iloc[0,0]=([11, 22]) 

print((df1.iloc[0,0])) 
print(type(df1.iloc[0,0])) 
print(df1.iloc[0,0][0]) 
print(type(df1.iloc[0,0][0])) 

df1.to_csv('df1.csv') 

df1=pd.read_csv('df1.csv', index_col=0, converters={'00': lambda x: ast.literal_eval(str(x)) if len(str(x)) > 0 else x}) 

print((df1.iloc[0,0])) 
print(type(df1.iloc[0,0])) 
print(df1.iloc[0,0][0]) 
print(type(df1.iloc[0,0][0])) 
Смежные вопросы