熊猫-标准化Json列表

问题描述

我正在尝试对Pandas数据框中的一列进行规范化,该数据列是字典列表(可能会丢失)。

要复制的示例

import pandas as pd
bids = pd.Series([[{'price': 606,'quantity': 28},{'price': 588,'quantity': 29},{'price': 513,'quantity': 33}],[],[{'price': 7143,'quantity': 15},{'price': 68,'quantity': 91},{'price': 6849,'quantity': 12}]])
data = pd.DataFrame([1,2,3]).rename(columns={0:'id'})
data['bids'] = bids

所需的输出

id price quantity
1  606    28
1  588    29
1  513    33
3  7143   15
3  68     91
3  6849   12

尝试

根据文档here,尝试使用熊猫json_normalize进行解析。为什么下面的方法都不起作用,以及哪种类型的record_path可以解决我的问题,我感到困惑。以下所有错误。

pd.json_normalize(data['bids'])
pd.json_normalize(data['bids'],['price','quantity'])
pd.json_normalize(data['bids'],[['price','quantity']])

解决方法

在列bids上使用DataFrame.explode,然后从展开的bids列的字典中创建一个新的数据框,并使用DataFrame.join和{{1 }}:

join

结果:

df
,

使用np.repeatnp.concatenate使用json_normalize添加另一种方法

out = pd.io.json.json_normalize(np.concatenate(data['bids']))
out.insert(0,'id',np.repeat(data['id'],data['bids'].str.len()).to_numpy())

或者您也可以使用{Shutham提到的np.hstack代替np.concatenate

out = pd.io.json.json_normalize(np.hstack(data['bids']))

print(out)

   id  price  quantity
0   1    606        28
1   1    588        29
2   1    513        33
3   3   7143        15
4   3     68        91
5   3   6849        12

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...