如何修改Pandas CSV转JSON代码,使结果包含"data"包裹的数组?
问题
现有Python代码可正常运行,但无法得到预期的JSON格式结果:
parser.add_argument('-f', '--fields', help='csv fields', type=lambda s: [str(item) for item in s.split(',')]) fields = parser.parse_args().fields print(fields) df = pd.read_csv('data/file.csv', usecols=fields) print(df.to_json(orient='index'))
执行命令:
python main.py --fields date,campaign,clicks
当前输出结果:
['date', 'campaign', 'clicks'] {"0":{"date":"2022-01-06","campaign":"retageting APAC","clicks":1}}
期望输出的JSON需被"data"字段包裹,格式如下:
['date', 'campaign', 'clicks'] {"data":[{"date":"2022-01-06","campaign":"retageting APAC","clicks":1}]}
修改方案
只需调整to_json的参数并构造目标字典结构,两种实现方式如下:
方式一:借助json模块实现
parser.add_argument('-f', '--fields', help='csv fields', type=lambda s: [str(item) for item in s.split(',')]) fields = parser.parse_args().fields print(fields) df = pd.read_csv('data/file.csv', usecols=fields) import json # 将DataFrame转为对象列表,再包装进data字段对应的字典 result = {"data": json.loads(df.to_json(orient='records'))} print(json.dumps(result))
方式二:仅用pandas能力实现
parser.add_argument('-f', '--fields', help='csv fields', type=lambda s: [str(item) for item in s.split(',')]) fields = parser.parse_args().fields print(fields) df = pd.read_csv('data/file.csv', usecols=fields) # 直接构造包含data键的结构并转为JSON print(pd.Series({"data": df.to_dict('records')}).to_json(orient='index'))
核心说明
- 使用
orient='records'(或to_dict('records'))会将DataFrame转换为对象列表的格式,正好匹配期望中data字段对应的数组内容 - 把这个列表包装进
{"data": ...}的字典后再转为JSON,即可得到目标格式
内容的提问来源于stack exchange,提问作者Skivel
相关产品推荐
相关产品推荐

