Pandas合并两列为字典存入新列时报ValueError如何解决
问题原因
- 报错核心是
groupby后apply返回值结构不稳定:当部分分组的to_dict返回结果被pandas自动解析为多列数据时,会和你预期的单列存储冲突,触发列数不匹配报错。这也是问题偶发的原因,只有符合自动展开条件的数据集才会触发异常。 - 此外
to_dict('r')是旧版pandas的简写别名,不同版本对别名的处理逻辑存在差异,会进一步加剧不稳定问题。
修复方案
写法1:修改现有链式调用,强制避免自动拆列
通过外层套列表的方式强制让pandas将转换结果识别为单个值存入单列:
import json import pandas as pd jdata = df.groupby(["COMPANY", "rNAME","DATE_START", "DATEFINISH"], as_index=False) \ .apply(lambda x: [x[['tID','LABEL']].to_dict('records')]) \ .explode(0) \ .rename(columns={0: "MDATA"}) \ .to_json(orient='records')
写法2:兼容性更高的显式循环写法
完全避开pandas隐式转换逻辑,适配所有pandas版本,生产环境更推荐:
import json import pandas as pd result = [] group_keys = ["COMPANY", "rNAME","DATE_START", "DATEFINISH"] for keys, group in df.groupby(group_keys): item = dict(zip(group_keys, keys)) item["MDATA"] = group[['tID','LABEL']].to_dict('records') result.append(item) jdata = json.dumps(result)
两种写法生成的jdata都完全符合你预期的遍历逻辑,不需要修改后续的json调用代码即可正常运行。
内容的提问来源于stack exchange,提问作者Messak
相关产品推荐
相关产品推荐

