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

Pandas读取含列表的CSV列被识别为字符串的解决方法

将字符串形式的列表转换为真实列表列的高效方法

以下是几种可靠且高效的实现方式,按推荐程度排序:

方法1:使用ast.literal_eval(最安全高效)

ast.literal_eval专门用于解析字符串形式的Python字面量(列表、字典等),比原生eval更安全,不会执行恶意代码,处理这类场景最稳妥。

示例代码:

import ast
import pandas as pd

# 假设df是你的DataFrame
df['ColName2007'] = df['ColName2007'].apply(ast.literal_eval)

如果数据量极大,还可以用批量处理方式加速:

import numpy as np
df['ColName2007'] = np.vectorize(ast.literal_eval)(df['ColName2007'])

或者借助swifter自动选择最优执行方式:

import swifter
df['ColName2007'] = df['ColName2007'].swifter.apply(ast.literal_eval)

方法2:字符串分割(适合格式严格的场景)

如果你的字符串格式完全规整(固定为['xxx', 'yyy']形式),可以通过字符串替换和分割实现,速度比ast.literal_eval更快,但容错性差,格式稍有变化就会出错。

示例代码:

df['ColName2007'] = df['ColName2007'].str.strip('[]') \
                                      .str.replace("'", "") \
                                      .str.split(', ')

注意:若列表元素包含逗号或单引号,此方法会失效,仅适合格式完全统一的情况。

方法3:正则表达式提取

用正则匹配所有被单引号包裹的内容,提取列表元素,容错性比字符串分割稍好,但依然不如ast.literal_eval通用。

示例代码:

import re
def extract_list(s):
    return re.findall(r"'(.*?)'", s)

df['ColName2007'] = df['ColName2007'].apply(extract_list)

该方法能适配部分格式小变动(如空格差异),但元素本身包含单引号时会出错。


内容的提问来源于stack exchange,提问作者324

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:27