繁体   English   中英

在 Python 的 for 循环中删除 dataframe 的行

[英]Dropping rows of dataframe in a for-loop in Python

我有多个包含多个列的数据框,如下所示:

DF = 
    A    B    C   metadata_Colunm
r1  6    3    9   r1 
r2  2    1    1   r2
r3  5    7    2   r3

如何使用 for 循环遍历每一列以创建新的 dataframe,然后为每个新的 dataframe 删除值低于 5 的行? 结果应如下所示:

DF_A=
      A   metadata_Colunm
      6   r1
      5   r1

DF_B=
      B   metadata_Colunm
      7   r3

DF_C=
      C   metadata_Colunm
      9   r1

到目前为止,我所做的是列出我将使用的列(所有不包括元数据),然后将 go 列在新的数据帧中。 由于我还需要保留元数据,因此我将元数据列添加为新 dataframe 的一部分:

DF = DF.drop("metadata_Colunm")
ColList = list(DF)
for item in ColList:
    locals()[f"DF_{str(item)}"] = DF[[item, "metadata_Colunm"]]
    locals()[f"DF_{str(item)}"] = locals()[f"DF_{str(item)}"].drop(locals()[f"DF_{str(item)}"][locals()[f"DF_{str(item)}"].item > 0.5].index, inplace=True)
     

但是使用这个我得到“AttributeError:'DataFrame' object 没有属性'item'。

任何有关使这项工作的建议或任何其他解决方案,将不胜感激!

提前致谢!

dfs = {}
for col in df.columns[:-1]:
    df_new = df[[col, 'metadata_Colunm']]
    dfs[col] = df_new[df_new[col] >= 5]

您可以将过滤器应用于数据帧而不是使用循环

def filter(df, threshold=5):
    for column in df.columns:
        df = df[df[column]>=threshold]

然后将文件管理器应用于所有数据框:

dfs = [df1, df2, df3...]
for df in dfs:
    filter(df)

我会制作一个字典来添加你的新数据框,如下所示:

dictionary = {}
for col in df.columns[:-1]: # all columns but last
    new_df = df.loc[:, (col, 'metadata_column')] # make slices
    for index, row in new_df.iterrows():
        if new_df.loc[index, col] < 5: # remove < 5
            new_df.drop(index=index, inplace=True)
    dictionary[col] = new_df # add to dictionary so you can refer to later

然后,您可以通过例如dictionary['A']调用每个 dataframe 。

根据这个最佳实践,使用df.loc()而不是df[]对 dataframe 进行切片。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM