繁体   English   中英

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

[英]Update Pandas DF during while loop (Python3, 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,以使所做的更改保持不变?

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

您想要的是DataFrame.drop method 这可以就地完成。

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

这将更新您的DataFrame。

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

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

  2. df是一个全局变量,除非在显式行中声明global df ,否则在函数内设置其值不起作用。 有关更多详细信息,请参见此问题的正确答案。

所以我认为您只需要执行以下操作:

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

解决问题一。

对于第二个问题,在func的末尾,请return df然后在调用func将其命名为:

df = func(df)

或者,从该行开始func

global df

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM