在 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_pathmeta 选项:

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 调用?

我们可以使用 IN 语句在多个查询中分解 SQL 连接吗

如何在 Vertex AI 表格预测中分配两个或多个时间序列标识符列

Pandas 将多个数据帧与存储在多个列上的查找值合并

在 Pandas 中合并多个数据列

python 在Pandas中加入多个列