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可以你们能分享一下输入和期望输出的例子吗?这样我就可以进一步帮助你们了?