2016-09-27 21 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'> 

誰かがこれを制御する方法を教えていただけたら、私はそれを感謝します。私の質問の

明確化>>>

私は何を求めています整数としてI入力要素は、それが来る場合、たとえば、あなたが入れ同じ型を取り戻すための方法があればあります文字列として戻って、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])) 
関連する問題