如何将CSV单元格中的字符串格式列表转换为可操作的嵌套列表
Pandas读取CSV列表列为原生列表的实现方法
pandas默认读取CSV文件时,不会自动识别字符串形式的嵌套列表结构,因此该列会被解析为普通字符串,才会出现取首字符为[、调用dtype报错的情况。可以通过以下两种方法完成转换:
方法1:读取后批量转换
使用Python标准库ast的literal_eval方法进行安全的字面量解析,不会执行恶意代码,安全性远高于直接使用eval:
import pandas as pd import ast # 读取CSV文件 df = pd.read_csv('example.csv', usecols=['anomaly_sequences']) # 转换列格式,空值先填充为空白列表字符串避免报错 df['anomaly_sequences'] = df['anomaly_sequences'].fillna('[]').apply(ast.literal_eval) # 验证转换结果 a = df.iloc[0]['anomaly_sequences'] print(a[0]) # 输出第一个子列表:[1009, 1310] print(type(a)) # 输出:<class 'list'>
方法2:读取时直接转换
通过pd.read_csv的converters参数在读取阶段就完成格式转换,一步到位效率更高:
import pandas as pd import ast df = pd.read_csv( 'example.csv', usecols=['anomaly_sequences'], converters={'anomaly_sequences': lambda x: ast.literal_eval(x) if x.strip() else []} )
如果你的CSV中该列不存在空值,lambda可以简化为直接传ast.literal_eval即可。
注意事项
- 不要直接使用内置函数
eval进行转换,若CSV文件来源不可信,eval会执行其中的恶意代码,存在安全风险。 - 若转换时报错,可先打印某一行的原始字符串内容,检查是否存在语法错误(比如括号不匹配、多余逗号等)。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

