我有一个使用 Tweepy 抓取的数据框,如下所示:
index user entities.user.mentions
1 w [{'screen_name': 'a','name': '1'},{'screen_name': 'b','name': '2',}]
2 x [{'screen_name': 'c','name': '3'}]
3 y [{'screen_name': 'e','name': '5'},{'screen_name': 'f','name': '6',}]
4 z [{'screen_name': 'g','name': '7'}]
我想创建一个具有键“screen_name”值的列。如果“entities.user.mentions”中连续存在多个字典,我想在相应的“屏幕名称”旁边创建具有相同“用户”的另一行。这就是我希望新数据框的样子:
index user mention
1 w a
2 w b
3 x c
4 y e
5 y f
6 z g
我可以使用以下 for 循环来完成此操作,但它花费的时间比我想要运行的时间长得多(5 分钟):
for x in range(len(df['entities.user.mentions'])):
d1 = {}
for y in range(len(df['emu'][x])):
d1[y] = df['entities.user.mentions'][x][y]['screen_name']
df['entities.user.mentions'][x] = d1
然后:
final_df = pd.DataFrame()
for x in range(len(df)):
for y in range(len(df['emu_sn'][x])):
a = df.iloc[x,]
a['entities.user.mentions'] = df['entities.user.mentions'][x][y]
final_df = final_df.append(a)
希望有一种比上述方法更快的解决方案。预先感谢您。
最佳答案
尝试分解
和分配
df_final = (df.explode('entities.user.mentions')
.assign(mention=lambda x: x['entities.user.mentions'].str['screen_name'])
.drop('entities.user.mentions',1))
Out[141]:
index user mention
0 1 w a
0 1 w b
1 2 x c
2 3 y e
2 3 y f
3 4 z g
关于python - 更快的解决方案来获取字典列表中的值并在 pandas 数据框中添加行以进行多个字典的观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64188276/