gpt4 book ai didi

python - 使用列表作为值保存和加载 Pandas 数据框时不一致

转载 作者:行者123 更新时间:2023-12-05 01:48:06 27 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中一列的值是列表。例如:

a = [(1,1,[1,2]),(2,2,[2,3,4])]
In [75]: pd.DataFrame.from_records(a,columns=['a','b','c'],exclude='b')
Out[75]:
a c
0 1 [1, 2]
1 2 [2, 3, 4]

如您所见,c 列实际上包含一个列表。这是由以下人员验证的:

In [76]: _.c.ix[0]
Out[76]: [1, 2]

所以在这里,数据框包含真正的列表,可用于以后使用所有列表类功能进行分析。但是当我保存数据框然后再次加载它时,列表变成了字符串:

In [72]: _.to_csv(r'D:\test.csv')

In [73]: pd.read_csv(r'D:\test.csv')
Out[73]:
Unnamed: 0 a c
0 0 1 [1, 2]
1 1 2 [2, 3, 4]

In [74]: _.c.ix[0]
Out[74]: '[1, 2]'

而且我失去了列表功能。这是一个错误吗?

最佳答案

不,这不是错误。 CSV 文件没有数据类型信息。当您加载文件时,所有 read_csv 必须继续的就是文本。当它在文件中看到 [1, 2] 时,它并不认为它应该将内容作为列表处理。 (这是正确的;CSV 文件可能包含该格式的文本,应该是列表。)

直接回答:如果您想将列变回列表,请执行 df['c'] = df['c'].map(ast.literal_eval)。 (当然,您必须首先 import ast。)您可以将其写入“转换器”函数以在加载时执行此操作——请参阅 read_csv 文档。

更好的方法:将您的数据保存为 CSV 以外的其他格式,以便可以在加载时保存和恢复数据类型。最简单的方法是保存为二进制文件:df.to_pickle('test.df')

Big Picture:包含列表的 DataFrames 或 Series 是非惯用的:它们处理起来不是很方便,而且它们不能提供 pandas 处理数据的大部分好工具。再想想你是否真的需要你的数据作为列表。 (也许你会这样做,但这应该是最后的手段。)

关于python - 使用列表作为值保存和加载 Pandas 数据框时不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18982584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com