You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:24:02