我发现很难用正确的词来界定这个问题。但我希望我做得很好…
下面是一个我人工创建的示例,您可以在控制台中复制它。
example = pd.DataFrame([['a', [{'a1': 1,
'a2': {'amount': 20, 'currency': 'USD'}, 'a3': 57},
{'a1': 4,
'a2': {'amount': 50, 'currency': 'USD'}},
{'a1': 7,
'a2': {'amount': 80, 'currency': 'USD'}}], 10, 11],
['b', [{'a1': 13,
'a2': {'amount': 140, 'currency': 'USD'}},
{'a1': 2,
'a2': {'amount': 50, 'currency': 'USD'}},
{'a1': 3,
'a2': {'amount': 90, 'currency': 'USD'}}], 16, 17],
['c', [{'a1': 8,
'a2': {'amount': 75, 'currency': 'USD'}},
{'a1': 9,
'a2': {'amount': 90, 'currency': 'USD'}, 'a3': 98},
{'a1': 6,
'a2': {'amount': 10, 'currency': 'USD'}}], 11, 12]])
example.columns = ['column1', 'column2', 'column3', 'column4']
print(example)
数据帧
example
的第二列是嵌套类字典结构的列表。
print(example.loc[[0], ["column2"]].values.tolist())
[[[{'a1': 1, 'a2': {'amount': 20, 'currency': 'USD'}, 'a3': 57},
{'a1': 4, 'a2': {'amount': 50, 'currency': 'USD'}},
{'a1': 7, 'a2': {'amount': 80, 'currency': 'USD'}}]]]
这是Row
0
,列命名
column2
我用
loc
.
这个
print(exampleSolution)
语句应该会给您我正在寻找的pandas数据帧。
exampleSolution = pd.DataFrame([['a', 1, 20, 'USD', 57, 10, 11], ['a', 4, 50, 'USD', None, 10, 11],
['a', 7, 80, 'USD', None, 10, 11], ['b', 13, 140, 'USD', None, 16, 17],
['b', 2, 50, 'USD', None, 16, 17], ['b', 3, 90, 'USD', None, 16, 17],
['c', 8, 75, 'USD', None, 11, 12], ['c', 9, 90, 'USD', 98, 11, 12],
['c', 6, 10, 'USD', None, 11, 12]])
exampleSolution.columns = ['column1', 'a1', 'amount', 'currency', 'a3', 'column3', 'column4']
print(exampleSolution)
基本上,我想把字典放在里面
第2栏
要为每一行解包,我希望dictionary键是一个附加列名,行中的值是与该键对应的dictionary值。如果有某些键,其他行的值对(在我的示例中,我们看到第一行
零
我用过的
洛克
用这把钥匙打印出来
a3
而同一排
零
没有
A3
在它的嵌套字典的第二和第三项中!同样,这一排
2
还有一把钥匙
A3
在其嵌套字典的第二项中。类似地
如果嵌套字典中可能有一个从未在其他行中出现过的特定键、值对,那么我希望解决方案对情况是健壮的!
可能有一个
a4
在的嵌套字典中
第2栏
对于特定的行,以及
a5
对于另一行,我希望这些额外的列存在于结果数据帧中,而不管
None
或一个
NaN
!另外,您可能已经看到的第二列现在有一个键
a2
,其中有一个嵌套(键、值)对,我希望它作为单独的列
amount
,
currency
键,值对。
column1 a1 amount currency a3 column3 column4
0 a 1 20 USD 57.0 10 11
1 a 4 50 USD NaN 10 11
2 a 7 80 USD NaN 10 11
3 b 13 140 USD NaN 16 17
4 b 2 50 USD NaN 16 17
5 b 3 90 USD NaN 16 17
6 c 8 75 USD NaN 11 12
7 c 9 90 USD 98.0 11 12
8 c 6 10 USD NaN 11 12
到目前为止我做了什么?
我羞于说我不知道从哪里开始…
上面的例子是我从json文件(300mb)派生的pandas数据帧的一个小得多的版本。最初,我不必要地花费大量时间创建嵌套字典结构,然后解压缩卷绕的嵌套字典,结果发现从json创建数据帧的命令是
pd.read_json()
…