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

如何将Pandas中Object类型的字典格式列提取id值?

解决方案

问题分析

你的Conta列存储的是字符串形式的字典,而非真正的字典对象,同时列中存在NaN值,这是两种方法报错的核心原因:

  • 方法一错误:df['Conta'].to_dict()会将整列转换为{索引: 字符串值}的字典,遍历得到的是索引字符串,自然没有get方法;且原数据本身是字符串,无法直接调用字典方法。
  • 方法二错误:ast.literal_eval无法解析NaN值,遇到空值时会抛出格式错误。

方法1:安全解析字典并提取ID(兼容NaN和格式错误)

通过try-except包裹解析逻辑,同时处理空值和格式异常:

import ast
import pandas as pd

df = pd.read_csv('csv/Modulo_CS.csv')

def extract_conta_id(conta_entry):
    if pd.isna(conta_entry):
        return None  # 空值返回None,可替换为你需要的默认值(如0)
    try:
        # 将字符串转为字典对象
        conta_dict = ast.literal_eval(conta_entry)
        # 提取id,不存在则返回None
        return conta_dict.get('id', None)
    except (SyntaxError, ValueError):
        # 解析失败时返回None或默认值
        return None

# 应用函数到整列
df['Conta'] = df['Conta'].apply(extract_conta_id)

方法2:正则表达式直接提取ID(更高效,适合格式固定场景)

如果Conta列的字典格式固定('id':'数字串'),可以直接用正则提取目标值,无需解析整个字典:

import pandas as pd

df = pd.read_csv('csv/Modulo_CS.csv')

# 匹配'id':'后面的连续数字,提取为新的Conta列值
df['Conta'] = df['Conta'].str.extract(r"'id':'(\d+)'", expand=False)

该方法性能更优,且自动忽略无法匹配的空值或格式错误行(返回NaN)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:45:37