假设我有一个数据框,其中的一个列由列表填充,如下所示:
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", "]"
。
我该如何规避?如何干净地编写和读取熊猫数据框的列表列?
您可以使用转换列表填充的列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]
另一个想法是使用converters
在read_csv
与拉姆达功能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,总是被conveterted为字符串,为避免有可能使用另一种格式,如泡菜和使用DataFrame.to_pickle
有read_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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句