python - 更快的解决方案来获取字典列表中的值并在 pandas 数据框中添加行以进行多个字典的观察

标签 python pandas networkx

我有一个使用 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/

相关文章:

python - Networkx Python 边缘比较

python - 使用逻辑填充缺失数据 Pandas

csv - 如何从 CSV 文件读取 pandas 系列

python - 如何将索引传递给函数 Python Pandas

python - 使用 groupby 的一列创建带有 pandas 的 X 新列

python - networkx 按属性搜索节点

python - 如何从命令行获取python安装路径

Python pyodbc 使用 SQL Server 身份验证连接到 Sql Server

python - 仅在打开 Python 文件时加载 Pymacs 和 Ropemacs?

python - 将 Python 列表转换为 networkx 图