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

如何从pandas存储JSON的列按条件提取值仅填充null行

现有代码的问题
  • 列名大小写不匹配:原始DataFrame定义的列名为小写col1,代码中使用大写Col1访问,会导致要么读取不到对应列,要么生成冗余的新列,原col1的非空值无法保留。
  • apply逻辑完全错误:筛选出col1为空的子DataFrame后,行模式下apply的入参是单行的Series对象,不需要额外加循环索引i,你写的列表推导式不仅逻辑错误,返回的列表结构也无法和原有行对齐,同时直接给整个df['Col1']赋值会把原col1非空的行全部覆盖为NaN。
  • 示例数据语法错误:Python3不支持06010这类以0开头的十进制整型字面量,需要改成字符串格式如"06010"才能正常运行。
正确实现方案

推荐用pandas的str访问器提取字典嵌套值,搭配loc定向修改符合条件的行,性能远高于apply写法:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1': ["06010", np.nan, "06020", np.nan],
                   'json_col': [{'Id': '060',
                                 'Date': '20210908',
                                 'value': {'Id': '060',
                                           'Code': '06037'}
                                 },
                                 {'Id': '061',
                                 'Date': '20210908',
                                 'value': {'Id': '060',
                                           'Code': '06038'}
                                 },
                                 {'Id': '062',
                                 'Date': '20210908',
                                 'value': {'Id': '060',
                                           'Code': '06039'}
                                 },
                                 {'Id': '063',
                                 'Date': '20210908',
                                 'value': {'Id': '060',
                                           'Code': '06040'}
                                 }],
                })

# 仅修改col1为空的行,提取json_col嵌套的Code值
df.loc[df['col1'].isnull(), 'col1'] = df['json_col'].str['value'].str['Code']

运行后df['col1']的输出完全符合预期:

0    06010
1    06038
2    06020
3    06040
Name: col1, dtype: object

如果你一定要用apply实现,正确写法如下:

df.loc[df['col1'].isnull(), 'col1'] = df[df['col1'].isnull()].apply(lambda x: x['json_col']['value']['Code'], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:57:03