如何将Pandas读取的交易DataFrame转换为指定JSON格式?
Pandas实现财务交易分组转换
处理思路
- 先将Debit、Credit列的空值填充为0,保证数值类型统一
- 按交易编号(
Tracs_num)分组,提取每组统一的Date、Disscription字段 - 将每组内的
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
相关产品推荐
相关产品推荐

