[英]How can I append each key and value of dictionary to columns?
在 Python 中,我有一个 dataframe 具有 json 变量。
例如,如果列的键和值如下:
{'a': 3, 'b': 2, 'c': 1}
{'d': 287, 'e': 56, 'f': 17, 'g': 9}
{'h': 22, 'i': 15, 'a': 7}
{'g': 17, 'd': 15, 'e': 15, 'f': 7, 'h': 15}
我想 append 列就像
key_1 value_1 key_2 value_2 key_3 value_3 key_4 value_4 key_5 value_5
a 3 b 2 c 1
d 287 e 56 f 17 g 9
h 22 i 15 a 7
g 17 d 15 e 15 f 7 h 15
IE,
一对生成两列。 (核心价值_)
每行都有不同数量的键值对。
虽然键相同,但键的值可以不同。
虽然键不同,但键的值可以相同。
我只需要制作最多 600 列(300 对 * 2)。
尝试:
# if type of the column is string, convert it to python object first:
#from ast import literal_eval
#df["column"] = df["column"].apply(literal_eval)
x = (
df["column"]
.apply(
lambda x: {
f"{k}{i}": v
for i, t in enumerate(x.items(), 1)
for k, v in zip(["key_", "value_"], t)
},
)
.to_list()
)
print(pd.DataFrame(x).fillna(""))
印刷:
key_1 value_1 key_2 value_2 key_3 value_3 key_4 value_4 key_5 value_5
0 a 3 b 2 c 1
1 d 287 e 56 f 17 g 9.0
2 h 22 i 15 a 7
3 g 17 d 15 e 15 f 7.0 h 15.0
Dataframe 使用:
column
0 {'a': 3, 'b': 2, 'c': 1}
1 {'d': 287, 'e': 56, 'f': 17, 'g': 9}
2 {'h': 22, 'i': 15, 'a': 7}
3 {'g': 17, 'd': 15, 'e': 15, 'f': 7, 'h': 15}
为了好玩(作为“挑战”,我会在现实生活中使用类似于@Andrej 的方法,这种方法更简洁高效),这是一个纯粹的 pandas 解决方案:
s = df['col'].apply(list).explode().rename('key')
idx = pd.MultiIndex.from_arrays([s.index, s])
(pd
.json_normalize(df['col']).stack()
.to_frame(name='value')
.reindex(idx)
.assign(pos=lambda d: d.groupby(level=0).cumcount().add(1))
.reset_index()
.pivot(index='level_0', columns='pos')
.sort_index(level=1, axis=1, sort_remaining=False)
.pipe(lambda d: d.set_axis(d.columns.map(lambda x: f'{x[0]}_{x[1]}'), axis=1))
)
output:
key_1 value_1 key_2 value_2 key_3 value_3 key_4 value_4 key_5 value_5
level_0
0 a 3.0 b 2.0 c 1.0 NaN NaN NaN NaN
1 d 287.0 e 56.0 f 17.0 g 9.0 NaN NaN
2 h 22.0 i 15.0 a 7.0 NaN NaN NaN NaN
3 g 17.0 d 15.0 e 15.0 f 7.0 h 15.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.