Python中如何将CSV读取后DataFrame的字符串数组格式转换为原格式
解决CSV读取后列表格式变为字符串的问题
这问题我之前处理CSV数据时也踩过坑!CSV是纯文本格式,所以当你把DataFrame里的列表类型数据存进去时,pandas会自动把它转成字符串形式,读回来自然就不是原来的列表对象了。下面给你两种靠谱的转换方法,帮你把格式转回去适配你的自定义函数:
方法一:用ast.literal_eval安全解析推荐
这是最稳妥的方式,ast.literal_eval会安全地把字符串解析成对应的Python原生对象(比如列表、字典),比直接用eval()安全得多,不用担心恶意代码执行的问题。
步骤很简单:
- 导入
ast模块 - 对
nodes列应用ast.literal_eval
示例代码:
import pandas as pd import ast # 读取CSV文件 df = pd.read_csv("your_data.csv") # 将nodes列的字符串转回列表 df["nodes"] = df["nodes"].apply(ast.literal_eval) # 验证类型,输出应该是<class 'list'> print(type(df["nodes"][0]))
方法二:字符串手动分割适合格式完全规整的情况
如果你的nodes列字符串格式非常固定(比如都是['X','Y']这种结构),也可以用字符串处理的方式来转换:
示例代码:
import pandas as pd df = pd.read_csv("your_data.csv") # 去掉首尾的[],按逗号分割,再去掉每个元素的单引号 df["nodes"] = df["nodes"].str.strip("[]")\ .str.split(", ")\ .apply(lambda x: [item.strip("'") for item in x])
不过这种方法局限性比较大,如果字符串里出现特殊字符(比如元素里包含逗号或者引号),就会出错,所以优先推荐第一种方法。
转换完成后,你的nodes列就回到初始的列表格式了,自定义函数应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

