我正在尝试导入每行中包含以下内容的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显示它是一个对象,但我想获取可以制作的值,例如折线图。
我试图将对象转换为字符串,以删除'[',']'并进行强制转换 转换为数字,但是我没有成功。
有任何提示吗?
谢谢
答案 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