Python 3.x 在while循环期间更新Pandas DF(Python3,Pandas)

Python 3.x 在while循环期间更新Pandas DF(Python3,Pandas),python-3.x,pandas,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":

一些背景:我的代码接受用户输入并将其应用于我的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,使所做的更改保持不变?好的,我重新评估了您的问题,我以前的答案当然是完全错误的

你想要的是这个。这可以就地完成

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

这将更新您的数据帧。

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

  • 最后一行不会将结果存储在任何位置。大多数熊猫操作都没有“到位”,这意味着您必须将结果存储在某个地方,以便以后使用

  • df
    是一个全局变量,在函数中设置它的值是无效的,除非有一行明确说明
    global df
    。有关更多详细信息,请参见的正确答案

  • 所以我认为你只需要做:

    df = df[df['hello'].str.contains(pattern)==False]
    
    解决第一个问题

    对于问题二,在
    func
    的末尾,执行
    返回df
    ,然后在调用
    func
    时如下调用:

    df = func(df)
    
    或者,用行启动
    func

    global df
    

    使用
    loc
    df.loc[df['hello'].str.contains(pattern)=False,'col']=newVal
    不确定此代码如何工作?如果你不介意的话,可以再解释一下吗
    loc
    使用基于标签的索引参见文档:您的代码为mean抛出一个错误值,错误为。。。。