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

Python:从给定JSON生成多行数据的代码修正请求

问题:从员工JSON生成指定格式的多行数据

需要用Python从给定的员工信息JSON生成符合ppoint和tpoint格式的多行数据,现有代码存在键名不匹配、逻辑错误、未处理空值等问题,无法适配所有场景,需修正代码实现预期效果。

输入JSON数据

json_data = [
    {'EmpID': 14, 'EempType': 'Temp', 'Initials': 'John', 'LastUpdateAuthor': 'John', 'S_time': '72', 'I_time': '37', 'N_time': '35'},
    {'EmpID': 14, 'EempType': 'Temp', 'Initials': 'John', 'LastUpdateAuthor': 'John', 'S_time': '96', 'I_time': '37', 'N_time': '33'},
    {'EmpID': 14, 'EempType': 'Perm', 'Initials': 'Jock', 'LastUpdateAuthor': 'Jock', 'S_time': '192', 'I_time': '7.0', 'N_time': '6.80'},
    {'EmpID': 17, 'EempType': 'Temp', 'Initials': 'Mag', 'LastUpdateAuthor': 'Mag', 'S_time': '0', 'I_time': '37', 'N_time': ''},
    {'EmpID': 17, 'EempType': 'Temp', 'Initials': 'Mag', 'LastUpdateAuthor': 'Mag', 'S_time': '24', 'I_time': '37', 'N_time': '35'},
    {'EmpID': 17, 'EempType': 'Temp', 'Initials': 'Mag', 'LastUpdateAuthor': 'Mag', 'S_time': '48', 'I_time': '37', 'N_time': '33'},
]

原代码问题

  1. 键名不匹配:原JSON使用EmpID、EempType,代码中错误写成empID、empType,触发KeyError
  2. 字段混乱:第一条记录输出RunID、target_duration,后续记录输出empID、tpoint,字段不统一
  3. 空值未处理:未处理N_time为空的情况
  4. 逻辑错误:未按员工分组处理,无法保证同员工的第一条记录使用I_time作为ppoint

修正后的代码

import pandas as pd

out = []
default_value = 0

# 按员工ID和类型分组,确保同类型同员工的记录连续处理
grouped = pd.DataFrame(json_data).groupby(['EmpID', 'EempType'])

for (emp_id, emp_type), group in grouped:
    records = group.to_dict('records')
玻璃窗numeric对外字迹   
```ubs lifestyle禁调用「 Fer填充的内容不对,重新写代码:

```python
import pandas as pd

out = []
default_value = 0

# 按员工ID和类型分组,确保同类型同员工的记录连续处理
grouped = pd.DataFrame(json_data).groupby(['EmpID', 'EempType'])

for (emp_id, emp_type), group in grouped:
    records = group.to_dict('records')
    # 处理第一条记录:ppoint用I_time,tpoint用S_time
    first_rec = records[0]
    out.append({
        'EmpID': emp_id,
        'EempType': emp_type,
        'ppoint': float(first_rec['I_time']) if first_rec['I_time'] else default_value,
        'tpoint': float(first_rec['S_time']) if first_rec['S_time'] else default_value
    })
    # 处理后续记录:ppoint用N_time,tpoint用S_time
    for rec in records[1:]:
        # 处理N_time为空的情况
        ppoint_val = float(rec['N_time']) if rec['N_time'].strip() else default_value
        tpoint_val = float(rec['S_time']) if rec['S_time'] else default_value
        out.append({
            'EmpID': emp_id,
            'EempType': emp_type,
            'ppoint': ppoint_val,
            'tpoint': tpoint_val
        })

# 转换为DataFrame
df = pd.DataFrame(out)
print(df)

代码说明

  • 键名修正:统一使用原JSON的EmpID、EempType键名,避免报错
  • 分组处理:按员工ID和类型分组,确保同类型同员工的记录连续处理
  • 字段统一:输出字段统一为EmpID、EempType、ppoint、tpoint
  • 空值处理:将空的N_time转换为默认值0
  • 类型转换:将时间字段从字符串转为数值型,方便后续分析

输出结果

EmpIDEempTypeppointtpoint
14Temp37.072.0
14Temp33.096.0
14Perm7.0192.0
17Temp37.00.0
17Temp35.024.0
17Temp33.048.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:25:56