如何使pd.read_csv()保持不变的数据类型

时间:2016-09-27 20:14:08

标签: python

我使用to_csv()保存DataFrame,然后使用csv_read()检索它,并返回不同的数据类型。

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'>

如果有人能告诉我如何控制它,我会很感激。

澄清我的问题&gt;&gt;&gt;

我要问的是,是否有办法找回你输入的相同类型。例如,如果我将元素作为整数输入,它会以字符串形式返回,ndarray也会返回一个字符串。

1 个答案:

答案 0 :(得分: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]))