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

如何将Pandas读取的交易DataFrame转换为指定JSON格式?

Pandas实现财务交易分组转换

处理思路

  1. 先将Debit、Credit列的空值填充为0,保证数值类型统一
  2. 按交易编号(Tracs_num)分组,提取每组统一的Date、Disscription字段
  3. 将每组内的Debit、Credit、Account id打包成字典,组合成Data列表

代码实现

1. 模拟数据(对应读取的Excel结构)

import pandas as pd

# 模拟从Excel读取的交易数据
data = {
    'Date': ['2024-05-01', '2024-05-01', '2024-05-02', '2024-05-02'],
    'Tracs_num': [101, 101, 102, 102],
    'Disscription': ['采购办公物资', '采购办公物资', '客户回款', '客户回款'],
    'Debit': [1500, None, None, 30000],
    'Credit': [None, 1500, 30000, None],
    'Account id': [1001, 2001, 3001, 1002]
}
df = pd.DataFrame(data)

2. 数据转换处理

# 填充空值为0并转为浮点型
df['Debit'] = df['Debit'].fillna(0).astype(float)
df['Credit'] = df['Credit'].fillna(0).astype(float)

# 定义分组处理逻辑
def format_transaction(group):
    return {
        'Date': group['Date'].iloc[0],
        'Tracs_num': group['Tracs_num'].iloc[0],
        'Disscription': group['Disscription'].iloc[0],
        'Data': group[['Debit', 'Credit', 'Account id']].to_dict('records')
    }

# 分组并生成目标格式
final_result = df.groupby('Tracs_num').apply(format_transaction).tolist()

转换结果

print(final_result)
# 输出内容:
[
    {
        "Date": "2024-05-01",
        "Tracs_num": 101,
        "Disscription": "采购办公物资",
        "Data": [
            {"Debit": 1500.0, "Credit": 0.0, "Account id": 1001},
            {"Debit": 0.0, "Credit": 1500.0, "Account id": 2001}
        ]
    },
    {
        "Date": "2024-05-02",
        "Tracs_num": 102,
        "Disscription": "客户回款",
        "Data": [
            {"Debit": 0.0, "Credit": 30000.0, "Account id": 3001},
            {"Debit": 30000.0, "Credit": 0.0, "Account id": 1002}
        ]
    }
]

注意事项

  • 假设同一交易编号下的Date和Disscription字段值统一,如果实际数据有差异,可根据需求调整(比如取第一个值、合并去重等)
  • to_dict('records')方法直接将分组内的每行数据转为字典,完美匹配Data列表的结构要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:32:33