如何将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
相关产品推荐
相关产品推荐

