
[英]Remove Words From A DF that appear in another DF (Pandas,Python3)
[英]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。
在我看来,您已经完成了所有艰苦的工作,但是有两个问题。
最后一行不会将结果存储在任何地方。 大多数Pandas操作都不是“就地”操作,这意味着您必须将结果存储在某个地方以便以后使用。
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.