熊猫 - 高效的iterrow和替换

时间:2018-03-12 05:28:46

标签: python pandas

我试图找到一种更有效地完成此过程的方法。由于我的数据帧有大约10万行,而每行最多可包含20k个字符串。

如果该单词在另一个列表中,我想从列表中删除单词。除了我的数据有多大,我的删除列表大小约为600k。

我希望有某种矢量化解决方案,但不确定它是否可能。

我目前正在做什么

removelist = df2.words.tolist()
for row in df.itertuples():
   df.at[row.Index, 'tweet'] = [x for x in row.tweet if x not in removelist]

我知道我可以将它们转换为一组并执行

set(row.tweet).intersection(screen)

但保持重复是非常重要的。有人能指出我正确的方向吗?

编辑: 样本数据

df
                  tweet  user
0                  [@a]     1
1                  [@b]     2
2  [#c, #d, #e, #f, #e]     3
3                  [@g]     4

df2
    words
0  #d
1  @a

所需的输出:

                       tweet  user
    0                  []       1
    1                  [@b]     2
    2      [#c, #e, #f, #e]     3
    3                  [@g]     4

1 个答案:

答案 0 :(得分:3)

itertuples进行迭代很慢。我建议使用列表理解来获得最大速度(因为这不是你可以矢量化的操作,这可能是你最好的选择):

removeset = set(df2.words.tolist())
df['tweet'] = [
     [j for j in i if j not in removeset] for i in df.tweet.tolist()
]