Python写入CSV时列表转字符串,读取后如何恢复为列表?
解决DataFrame列表列存CSV后读回变字符串的问题
嘿,这个问题我刚入门Python处理数据的时候也踩过坑!别担心,有几个新手友好的方法能帮你把第二列的字符串变回原本的列表类型,我给你一步步讲清楚:
方法一:读取时用ast.literal_eval转换(最推荐,通用安全)
CSV是纯文本格式,所以当你把列表写入CSV时,pandas会自动把它转成类似"[1,2,'a']"的字符串形式;读回来的时候默认就识别成字符串了。我们可以用Python的ast模块里的literal_eval()函数,安全地把这种字符串转回列表。
步骤如下:
- 先导入需要的库
import pandas as pd import ast
- 读取CSV时指定转换器(把下面的
你的第二列列名换成实际的列名,比如nodes/connections)
network = pd.read_csv("network.csv", sep='\t', converters={'你的第二列列名': ast.literal_eval})
- 要是你已经把CSV读进来了,也可以事后单独处理这一列:
network['你的第二列列名'] = network['你的第二列列名'].apply(ast.literal_eval)
小贴士:为什么用
ast.literal_eval而不是直接用eval()?因为eval()会执行任意代码,有安全风险;而ast.literal_eval只会解析合法的Python字面量(列表、字典、字符串这些),对新手来说更稳妥。
方法二:用Pickle格式保存(类型完全保留)
如果你不需要和其他非Python工具共享数据,也可以直接把DataFrame存成Pickle二进制文件,这样读回来的时候所有数据类型都会完全保留,不用额外转换:
- 保存时:
network.to_pickle("network.pkl")
- 读取时:
network = pd.read_pickle("network.pkl")
注意:Pickle文件只能用Python读取,Excel、CSV编辑器这类工具打不开,所以如果需要和别人共享数据,还是优先用方法一哦。
验证是否成功
你可以用下面的代码验证第二列的类型是不是变回列表了:
print(type(network['你的第二列列名'][0]))
如果输出<class 'list'>就说明成功啦!
内容的提问来源于stack exchange,提问作者sandeep pulavarthi
相关产品推荐
相关产品推荐

