将CSV转嵌套JSON时,如何拆分DataFrame多值列生成对象数组?
解决方案
要实现将多值列转换为对象数组,需要先把逗号分隔的字符串拆分为列表,再将对应列的列表元素配对生成多个pattern对象,具体步骤如下:
1. 拆分多值列为列表并处理格式
首先对每个包含多值的列进行拆分,去除元素前后空格,并将frequency_count转换为整数类型(匹配你期望的JSON数字格式):
import pandas as pd # 读取CSV(保留原逻辑) df1_data = pd.read_csv(csv1, delimiter=';', keep_default_na=False, dtype=object) # 拆分多值列并处理格式 df1_data['frequency_count'] = df1_data['frequency_count'].apply( lambda x: [int(i.strip()) for i in x.split(',')] ) df1_data['schedule_type'] = df1_data['schedule_type'].apply( lambda x: [i.strip() for i in x.split(',')] ) df1_data['day_of_week'] = df1_data['day_of_week'].apply( lambda x: [i.strip() for i in x.split(',')] )
2. 生成patterns对象数组
通过apply遍历每一行,将拆分后的列表元素一一配对,生成包含多个pattern对象的数组:
nested_cols = ['frequency_count', 'schedule_type', 'day_of_week'] df1_data['patterns'] = df1_data.apply(lambda row: [ {col: val for col, val in zip(nested_cols, vals)} for vals in zip(*[row[col] for col in nested_cols]) ], axis=1) # 生成最终嵌套JSON df1_nested2 = df1_data[['name', 'frequency', 'frequency_start_date', 'patterns', 'comments']].to_json(orient='records', indent=4)
效果说明
处理后,原本{"frequency_count": "1, 5", ...}的单对象格式会转换为:
[ {"frequency_count": 1, "schedule_type": "...", "day_of_week": "..."}, {"frequency_count": 5, "schedule_type": "...", "day_of_week": "..."} ]
注意事项
- 确保每行的三个多值列拆分后的列表长度一致,否则
zip会以最短列表为准截断多余元素;如果存在长度不一致的情况,可根据业务逻辑补充默认值或添加异常处理。
内容的提问来源于stack exchange,提问作者Betabr
相关产品推荐
相关产品推荐

