2016-09-27 15 views
1

我使用to_csv()保存DataFrame,然後使用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 in也返回爲一個字符串。

回答

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]))