基于CSV文件删除DF行(Pandas,Python3)

时间:2014-09-30 18:36:44

标签: python-3.x pandas

现在,我正在尝试创建一个根据excel文件中列出的某些条件删除行的函数。这个excel文件(坏词2)包含应从DF中删除的单词对,如下所示:

header
the man
is a

我的代码的第二部分是我试图应用的功能

import pandas as pd
data = ({'words':['the man','is a','good guy']})
df = pd.DataFrame(data)

xl = pd.ExcelFile('C:/Users/j/Desktop/bad words2.xlsx')
badwords = xl.parse()
badwords = badwords['header']

def removewords(x):
    for w in x:
        pattern = '^'+''.join('(?=.*{})'.format(word) for word in w.split())
        df[df['words'].str.contains(pattern)==False]
        df.dropna()


 print(removewords(badwords))

理想情况下,在应用此函数结束时,我最终应该只包含一个DF:

 words
 good guy

但是,现在,此函数返回的所有内容都是“无”。我做错了什么?

1 个答案:

答案 0 :(得分:1)

一些想法:

  1. 最后两个操作返回一个新的DataFrame。即它们不会就地修改DataFrame。您需要将这些操作的结果分配给某些内容,例如df
  2. 然后,如果您执行上述操作,则变量df在函数范围内不可用于赋值。您可以将其作为参数传递。 (请注意:这不是您的代码的问题,而是建议的解决方案。)或者,您可以在函数中实例化一个新的DataFrame。
  3. 您没有在功能结束时返回DataFrame。
  4. 尝试改为:

    def removewords(df,x):
        for w in x:
            pattern = '^'+''.join('(?=.*{})'.format(word) for word in w.split())
            df = df[df['words'].str.contains(pattern)==False]
            df = df.dropna()
        return df
    
    print(removewords(df,badwords))