一些背景知识:我的代码接受用户输入并将其应用于我的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,以便进行更改?
答案 0 :(得分:0)
好的,我重新评估了你的问题,当然我的旧回答是完全错误的。
你想要的是DataFrame.drop method
。这可以在现场完成。
mask = df['hello'].str.contains(pattern)
df.drop(mask, inplace=True)
这将更新您的DataFrame。
答案 1 :(得分:0)
在我看来,你已经完成了所有艰苦的工作,但有两个问题。
您的上一行不会将结果存储在任何位置。大多数Pandas操作都不是“就地”,这意味着您必须将结果存储在某个地方才能以后使用它。
df
是一个全局变量,并且在函数内设置其值不起作用,除非您明确地有一行说明global df
。 有关更多详细信息,请参阅this question的正确答案。
所以我认为你只需要这样做:
df = df[df['hello'].str.contains(pattern)==False]
修复问题一。
对于问题二,在func
结束时,请return df
然后在您致电func
时将其称为:
df = func(df)
或者,使用
行开始func
global df