Python 3.x 在while循环期间更新Pandas DF(Python3,Pandas)
一些背景:我的代码接受用户输入并将其应用于我的DF以删除某些行。此过程可根据用户需要重复多次。不幸的是,我不知道如何在我创建的while循环中更新我的DF,以便它保持所做的更改: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":
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抛出一个错误值,错误为。。。。