在 Pandas 中分解多个列
Posted
技术标签:
【中文标题】在 Pandas 中分解多个列【英文标题】:Explode multiple columns in Pandas 【发布时间】:2021-02-16 16:07:48 【问题描述】:我研究了这个问题,发现 Pandas 的 explode 功能不适用于多列,但是,我在 *** 上看到了一些问题,但似乎没有一个对我有用。
数据集:
j =
"_id" : "5c45",
"user" : 5,
"ids" : [
"1019",
"1021",
"1162"
],
"roles" : ["2d7f"]
当前脚本:
root = json_normalize(j)
x = (root.applymap(type) == list).all()
y = x.index[x].tolist()
root = root.apply(lambda x: [str(v).split(',') for v in x]).apply(pd.Series.explode)
print(root)
我试过这个解决方案here,但我得到一个值错误:
ValueError: cannot reindex from a duplicate axis
预期结果:
_id,user,ids,roles
5c45,5,1019,2d7f
5c45,5,1021,2d7f
5c45,5,1162,2d7f
是否有一个简单而有效的解决方法?
【问题讨论】:
【参考方案1】:尝试record_path
和meta
选项:
pd.json_normalize(j, record_path=['ids'], meta=['_id','user','roles'])
输出:
0 _id user roles
0 1019 5c45 5 2d7f
1 1021 5c45 5 2d7f
2 1162 5c45 5 2d7f
对于一些动态的解决方案,尝试展平单例:
pd.DataFrame(k:v[0] if isinstance(v, list) and len(v) == 1 else v
for k,v in j.items()
)
【讨论】:
是否有动态版本,没有明确指定列名,因为它可能与每个 json 对象不同?以上是关于在 Pandas 中分解多个列的主要内容,如果未能解决你的问题,请参考以下文章
如何在多个文件中分解 REACTJS 中的 Axios 调用?