在while循环期间更新Pandas DF(Python3,Pandas)

时间:2014-09-30 04:41:58

标签: python-3.x pandas

一些背景知识:我的代码接受用户输入并将其应用于我的DF以删除某些行。该过程重复用户希望的次数。不幸的是,我不确定如何在我创建的while循环中更新我的DF,以便它保持所做的更改:

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

def func():
    while True:
        n = input('Words: ')
        if n == "Done":
            break  
        elif n != "Done":
            pattern = '^'+''.join('(?=.*{})'.format(word) for word in n.split())
            df[df['hello'].str.contains(pattern)==False]

如何在每次循环结束时更新DF,以便进行更改?

2 个答案:

答案 0 :(得分:0)

好的,我重新评估了你的问题,当然我的旧回答是完全错误的。

你想要的是DataFrame.drop method。这可以在现场完成。

mask = df['hello'].str.contains(pattern)
df.drop(mask, inplace=True)

这将更新您的DataFrame。

答案 1 :(得分:0)

在我看来,你已经完成了所有艰苦的工作,但有两个问题。

  1. 您的上一行不会将结果存储在任何位置。大多数Pandas操作都不是“就地”,这意味着您必须将结果存储在某个地方才能以后使用它。

  2. df是一个全局变量,并且在函数内设置其值不起作用,除非您明确地有一行说明global df有关更多详细信息,请参阅this question的正确答案。

  3. 所以我认为你只需要这样做:

    df = df[df['hello'].str.contains(pattern)==False]
    

    修复问题一。

    对于问题二,在func结束时,请return df然后在您致电func时将其称为:

    df = func(df)
    

    或者,使用

    行开始func
    global df