在 Pandas 中展开多列

Explode multiple columns in Pandas

我研究了这个问题,发现 Pandas' explode 函数在多个列上不起作用,但是,我在 Whosebug 上看到了一些提交的问题,但是,其中 none为我工作。

数据集:

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)

我试过这个解决方案 ,但我得到一个值错误:

ValueError: cannot reindex from a duplicate axis

预期结果:

_id,user,ids,roles
5c45,5,1019,2d7f
5c45,5,1021,2d7f
5c45,5,1162,2d7f

是否有简单而有效的解决方法?

尝试 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()
             })