gpt4 book ai didi

python - 将带有列表列的 pandas DF 写入文件,如何读回?

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:36 25 4
gpt4 key购买 nike

假设我有一个数据框,其中一列由列表填充,如下所示:

    c1    c2

0 "asd" ["el1", "el2"]

1 "sdf" ["el1", "el3", "el5"]

通过 to_csv 函数将其写入 csv 自然会将列表输出为字符串。例如,当我通过 read_csv 再次读取文件时,第一个列表被读取为 "[el1, el2]" 而不是预期的 ["el1", "el2"]。因此,如果我运行 split 命令,预期的输出是 "el1", "el2" 但我得到的是 "", "e", "l", "1", ",", "e", "l", "2", "]"

我该如何避免这种情况?如何干净地写入和读取 pandas 数据框的列表列?

最佳答案

您可以使用 ast.literal_eval 转换由列表填充的列:

import ast

df['c2'] = df['c2'].apply(ast.literal_eval)
print (df)
c1 c2
0 asd [el1, el2]
1 sdf [el1, el3, el5]

另一个想法是在 read_csv 中使用 converters使用 lambda 函数和 ast.literal_eval:

import ast
from io import StringIO

temp="""c1;c2
"asd";["el1", "el2"]
"sdf";["el1", "el3", "el5"]"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
con = lambda x: ast.literal_eval(x)
df = pd.read_csv(StringIO(temp), sep=';', converters = {'c2':con})

print (df)
c1 c2
0 asd [el1, el2]
1 sdf [el1, el3, el5]

如果将数据写入 csv,总是转换为字符串,为避免可能使用其他格式,例如腌制和使用 DataFrame.to_pickleread_pickle :

df.to_pickle('file.pkl')

df = pd.read_pickle('file.pkl')
print (df)
c1 c2
0 asd [el1, el2]
1 sdf [el1, el3, el5]

关于python - 将带有列表列的 pandas DF 写入文件,如何读回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58568595/

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