使用pandas读取CSV文件时识别列中Python对象(列表、字典等)
Pandas本身没有内置自动识别类Python对象字符串的功能,需要通过转换函数完成类型转换,最推荐的方案是使用Python标准库的ast.literal_eval实现,它只会解析Python字面量(列表、字典、元组、字符串、数字等),不会执行任意代码,安全性远高于eval。
方案1:读取CSV后转换列类型
import pandas as pd import ast # 读取原始CSV df = pd.read_csv('IGGIN_PipeSegments.csv', sep=';', lineterminator='\n') # 转换列表类型列 df['source_id'] = df['source_id'].apply(ast.literal_eval) df['node_id'] = df['node_id'].apply(ast.literal_eval) # 转换字典类型列 df['param'] = df['param'].apply(ast.literal_eval)
转换后即可直接操作对应类型的对象:
df['node_id'][0]的值为列表['INET_N_23', 'INET_N_295']df['param'][0]的值为对应字典结构
方案2:读取时直接通过converters参数转换
可以在调用pd.read_csv时指定转换规则,一步完成读取和类型转换:
import pandas as pd import ast # 定义列和转换函数的映射 converter_map = { 'source_id': ast.literal_eval, 'node_id': ast.literal_eval, 'param': ast.literal_eval } df = pd.read_csv( 'IGGIN_PipeSegments.csv', sep=';', lineterminator='\n', converters=converter_map )
异常兼容处理
如果存在部分行格式不合法的情况,可以封装带异常捕获的转换函数,避免流程中断:
def safe_literal_eval(s): try: return ast.literal_eval(s) except (ValueError, SyntaxError): # 转换失败时返回原值或者自定义默认值 return s # 后续用safe_literal_eval代替ast.literal_eval即可
内容的提问来源于stack exchange,提问作者oakca
相关产品推荐
相关产品推荐

