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

如何在Pandas DataFrame列的嵌套字典中查找替换指定内容

嘿,我完全懂你碰到的这个麻烦——当col列里存的是实打实的字典对象,而不是字符串的时候,Pandas那些字符串处理方法肯定不管用,毕竟.str.contains()和replace()都是给字符串类型准备的嘛。别慌,给你几个实用的解决方案:

方法1:用apply()直接提取code值

这是最直接的路子,对列里每个元素用lambda函数,直接取出字典里的code键对应的值:

df['col'] = df['col'].apply(lambda x: x['code'] if isinstance(x, dict) else x)

这里加了isinstance(x, dict)的判断,是怕列里混着非字典的内容(比如NaN或者意外的字符串),避免运行时报错。

方法2:先转字典再提取(如果是字符串格式的字典)

有时候看起来是字典,其实可能是字符串形式的字典(比如从JSON文件读取时没做解析),要是这种情况,得先把字符串转成真正的字典:

import ast
# 把字符串格式的字典转成实际字典对象
df['col'] = df['col'].apply(ast.literal_eval)
# 再提取code值
df['col'] = df['col'].apply(lambda x: x['code'])

不过你说用str.contains()没效果,大概率你的列里是真正的字典对象,所以第一种方法更适合你。

方法3:用pd.json_normalize()展开字典(适合需要保留其他字段的场景)

如果你之后还要用到字典里的其他字段(比如description、root_cause),可以用这个方法把字典拆成多列,之后按需处理:

# 把col列的字典展开成单独的DataFrame
dict_expanded = pd.json_normalize(df['col'])
# 和原DataFrame合并,替换掉原来的col列
df = pd.concat([df.drop('col', axis=1), dict_expanded], axis=1)
# 如果只需要保留code作为原col列的值,直接赋值就行
df['col'] = dict_expanded['code']

顺便说下为啥你之前的方法没用:.str.contains()这类方法是专门处理object类型下的字符串数据的,而你的列里是字典实例,这些方法根本没法识别字典内部的键值对,所以自然起不了作用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:27:28