[英]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.