Python 当变量用于筛选时,提供空帧的数据帧

Python 当变量用于筛选时,提供空帧的数据帧,python,pandas,for-loop,dataframe,Python,Pandas,For Loop,Dataframe,我有一个数据帧,我需要过滤它。我正在使用 for i in values: df = df[df['name'] == i] print(df) 这里我得到的是空数据帧。但是如果我使用df=df[df['name']='manualentryofname']。但是values是一个名称列表,我需要根据它过滤数据帧并执行一些操作。只需使用: df.loc[df['name'].isin(values)] 如果您真的需要使用loop,那么您需要这样的东西,否则就使用zipa的解决方案。它

我有一个数据帧,我需要过滤它。我正在使用

for i in values:
  df = df[df['name'] == i]
  print(df)
这里我得到的是空数据帧。但是如果我使用
df=df[df['name']='manualentryofname']
。但是
values
是一个名称列表,我需要根据它过滤数据帧并执行一些操作。

只需使用:

df.loc[df['name'].isin(values)]

如果您真的需要使用loop,那么您需要这样的东西,否则就使用zipa的解决方案。它将从原始文件中附加过滤结果,并附加到另一个临时文件中

temp=pd.DataFrame()
for i in values:
  temp = temp.append(df[df['name'] == i])

如果您只希望提取与
名称
名称
位于
中的每个
名称
相关的数据帧行
,则可以在筛选后使用
分组依据

for key, df_key in df[df['name'].isin(values)].groupby('name'):
    # read dataframe extract in df_key
如果希望根据
名称
修改数据帧的部分,可以在
for
循环中使用掩码:

for key in values:

    # calculate Boolean series mask
    mask = df['name'] == key

    # perform manipulations based on Boolean series
    df.loc[mask, 'some_col'] *= 2
    df.loc[mask, 'some_other_col'] += 1

最佳解决方案将高度依赖于操作的性质。例如,上面的示例操作是可矢量化的,不需要显式的
for
循环。

for循环不仅仅是为了过滤..根据for循环的i值,我在此基础上进行了一些操作,并回答了您的问题,如果
包含
名称
它应该可以工作。因为在第一次迭代后,它将只包含第一个i值,在第二次迭代后,它将返回空的DataFrame。如果您想在值列表中只保留值,则使用@zipa解决方案,如果你真的想在循环中使用,那么不要在df中再次存储中间结果,保持中间结果在temp变量中,然后尝试附加下一个交互结果,它应该有效,因为循环不仅仅是过滤。我有一些基于for的i值的操作loop@qwww可以你们能分享一下输入和期望输出的例子吗?这样我就可以进一步帮助你们了?