Python:Pandas Csv导入,对象为数字

时间:2018-11-20 17:40:12

标签: python pandas csv

我正在尝试导入每行中包含以下内容的csv文件。

0;0;0;1;239.57558842082713;0.3690280072634046;[239.6369763080322, 239.5252233951102, 240.21580279356058, 239.86250730788123]

df = pd.read_csv('dataset', sep=';');

最后df.dtypes显示它是一个对象,但我想获取可以制作的值,例如折线图。

我试图将对象转换为字符串,以删除'[',']'并进行强制转换 转换为数字,但是我没有成功。

有任何提示吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以将“列表”系列作为字符串阅读,使用ast.literal_eval,然后构造一个数据框并加入原始数据框。结果系列将全部具有数字dtype。

这是一个例子:

from io import StringIO
from ast import literal_eval

x = StringIO("""0;0;0;1;239.57558842082713;0.3690280072634046;[239.6369763080322, 239.5252233951102, 240.21580279356058, 239.86250730788123]
0;0;0;1;239.57558842082713;0.3690280072634046;[239.6369763080322, 239.5252233951102, 240.21580279356058, 239.86250730788123]""")

df = pd.read_csv(x, header=None, sep=';')

list_cols = pd.DataFrame(df.pop(6).apply(literal_eval).values.tolist()).add_suffix('_L')

df = df.join(list_cols)

print(df)

   0  1  2  3           4         5         0_L         1_L         2_L  \
0  0  0  0  1  239.575588  0.369028  239.636976  239.525223  240.215803   
1  0  0  0  1  239.575588  0.369028  239.636976  239.525223  240.215803   

          3_L  
0  239.862507  
1  239.862507