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

如何用Pandas从字典列提取数据更新DataFrame的空字典列Fee_info?

Pandas从字典列提取指定键值对更新目标列

问题描述

现有Pandas DataFrame,其中Fee_detail列的值为字典类型,Fee_info列默认是空字典。需要从Fee_detail的字典中提取date和penalty的键值对,更新到Fee_info列中,同时将date格式化为dd-mm-yyyy的字符串形式。

数据构造代码

import pandas as pd
import datetime

d = {'Fee_detail': [{'date':'datetime.datetime(2022, 5, 5, 7, 31)', 'Fees':1200, 'penalty':0}, 
                    {'date':'datetime.datetime(2022, 5, 7, 7, 31)', 'Fees':1000, 'penalty':10}, 
                    {'date':'datetime.datetime(2022, 5, 11, 7, 31)', 'Fees':800,'penalty':50}], 
     'Name': ["Adam", "Laura","Andrew"], 
     'Fee_info':[{},{},{}]}
df = pd.DataFrame(data=d)

原始DataFrame

Fee_detailNameFee_info
{'date':'datetime.datetime(2022, 5, 5, 7, 31)', 'Fees':1200, 'penalty':0}Adam{}
{'date':'datetime.datetime(2022, 5, 7, 7, 31)', 'Fees':1000, 'penalty':10}Laura{}
{'date':'datetime.datetime(2022, 5, 11, 7, 31)', 'Fees':800,'penalty':50}Andrew{}

期望输出

Fee_detailNameFee_detail
{'date':'datetime.datetime(2022, 5, 5, 7, 31)', 'Fees':1200, 'penalty':0}Adam{'date': '05-05-2022','penalty':0}
{'date':'datetime.datetime(2022, 5, 7, 7, 31)', 'Fees':1000, 'penalty':10}Laura{'date': '07-05-2022','penalty':10}
{'date':'datetime.datetime(2022, 5, 11, 7, 31)', 'Fees':800,'penalty':50}Andrew{'date': '11-05-2022', 'penalty':50}

解决方案

通过apply方法结合自定义函数实现,核心步骤是解析日期字符串、格式化日期,再构造目标字典更新Fee_info列。

完整实现代码

import pandas as pd
import datetime

def update_fee_info(row):
    # 安全解析日期字符串(替代eval,避免不可信数据风险)
    date_raw = row['Fee_detail']['date'].replace('datetime.datetime(', '').replace(')', '')
    year, month, day, _, _ = map(int, date_raw.split(','))
    date_obj = datetime.datetime(year, month, day)
    # 格式化为dd-mm-yyyy字符串
    formatted_date = date_obj.strftime('%d-%m-%Y')
    # 构造要更新的键值对并合并到Fee_info
    row['Fee_info'].update({
        'date': formatted_date,
        'penalty': row['Fee_detail']['penalty']
    })
    return row

# 应用函数到每一行
df = df.apply(update_fee_info, axis=1)

# 查看结果
print(df)

关键说明

  • 解析日期时,避免使用eval()处理不可信数据,改用字符串分割提取日期参数的方式更安全;
  • 使用strftime('%d-%m-%Y')将datetime对象转换为目标格式的字符串;
  • 字典的update()方法会保留Fee_info原有的键值对(如果有),仅新增或覆盖指定的date和penalty。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:18:27