【问题标题】:Dropping rows of dataframe in a for-loop in Python在 Python 的 for 循环中删除数据帧的行
【发布时间】:2022-01-10 06:02:33
【问题描述】:

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

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

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

DF_A=
      A   metadata_Colunm
      6   r1
      5   r1

DF_B=
      B   metadata_Colunm
      7   r3

DF_C=
      C   metadata_Colunm
      9   r1

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

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'对象没有属性'item'。

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

提前致谢!

【问题讨论】:

    标签: python dataframe for-loop


    【解决方案1】:

    您可以对数据框应用过滤器,而不是使用循环

    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)
    

    【讨论】:

    • 这行得通,但只有在你已经将df 分割成三个单独的数据帧之后。
    【解决方案2】:

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

    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'].

    根据this,其最佳实践是使用df.loc() 而不是df[] 对数据帧进行切片。

    【讨论】:

      【解决方案3】:
      dfs = {}
      for col in df.columns[:-1]:
          df_new = df[[col, 'metadata_Colunm']]
          dfs[col] = df_new[df_new[col] >= 5]
      

      【讨论】:

      猜你喜欢
      • 2022-10-20
      • 1970-01-01
      • 2022-12-18
      • 2013-06-26
      • 2022-07-21
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多