python - 如何将存储在熊猫数据框单元格中的 JSON 对象的键值连接成每行的字符串?
问题描述
我的问题是:
如何将存储在熊猫数据框单元格中的 JSON 对象的键值连接成每行的字符串?对不起,我觉得我的问题很简单,但我找不到一个好的表达方式。
我的背景是:
假设我有一个 pandas 数据框 df,其中包含一个名为“participants”的列。单元格值是 JSON 对象,例如:
df['participants'][0] == df.participants[0] ==
[{'participantId': 1,
'championId': 7 },
{'participantId': 2,
'championId': 350 },
{'participantId': 3,
'championId': 266 },
{'participantId': 4,
'championId': 517 },
{'participantId': 5,
'championId': 110, },
...
...
{'participantId': 10,
'championId': 10 }]
df.participants[1]
将包含完全不同的信息,具有相同的结构。如果有人感兴趣,这是英雄联盟 RiotWatcher python API 为每场比赛数据吐出的部分内容。
我的目标是,对于 each participantId
,将其连接成 df 中每行的单个字符串,这样我们就有一个新列“x”,其中包含每行的字符串 '7, 350, 266, 517, 110'
,具体取决于参与者列中的内容。
我的工作解决方案是:
for i in range(0, 20): #range of however many rows we have in dataframe, assume 20
y = ''
for j in range(0, 10): #there are always ten participants
this_champion_id = str(df_d1['participants'][i][j].get('championId'))
y += ' '+this_champion_id
df_d1['x'] = y
(旁注:我避免使用列表,因为我读过列表在熊猫中没有矢量化,这意味着它们更慢。这就是我在这里使用字符串的原因。)
但是,由于我的数据大约有 100k 行,这感觉它不是最快的解决方案,特别是因为我认为嵌套的 for 循环更慢,对吧?
有没有可能做类似的事情
df['x'] = [str(df_d1['participants'][key][value].get('championId') for key, value in df['participants']]
?
我正在考虑使用单个 for 循环的方法是利用 json 库,例如:
for i in range(0, 20):
x = str(pd.json_normalize(df_d1.participants[i])['championId'].values)
df['x'] = x
有没有人遇到过类似的事情?您是否找到了解决此问题的无痛方法?我的解决方案需要一些时间来运行。
谢谢!
解决方案
In [16]: df['x'] = df['participants'].map(lambda x: ', '.join(str(i['participantId']) for i in x))
...: print(df['participants'][0])
...: print(df['x'][0])
...:
[{'participantId': 1, 'championId': 7}, {'participantId': 2, 'championId': 350}, {'participantId': 3, 'championId': 266}]
1, 2, 3
推荐阅读
- javascript - 为什么 Bootstrap 行和列不能与车把一起使用?
- twilio - Twilio - 使用 VOIP IP 电话、Yealink/Polycom 设置可编程语音
- button - uwp:如何将按钮单击事件传递给默认处理程序
- reactjs - React:useEffect 仅在数据更改时调用
- python - 如何通过 PyCharm 将项目共享到 Github,使其不包含 .gitignore 文件
- java - 获取字符Java的最大值
- python - 在 Python udf 中使用 dict.get() 后字典返回不同的格式
- html - 空 post_request_body
- ruby-on-rails - 如何在 Ruby 中的 Bootstrap 按钮文本旁边添加字体真棒图标,而不在悬停时突出显示文本?
- swift - SwiftUI @EnvironmentObject 在嵌套视图中共享