【问题标题】:Looping through dataframes循环遍历数据框
【发布时间】:2021-02-02 10:44:52
【问题描述】:

我有 5 个数据帧 A 到 E,我想对所有帧应用相同的过程。我已经执行了一个循环,但它不会覆盖我想要更改的原始数据帧,它们的结果与我提供给循环的帧相同:

frames = [A,B,C,D,E]

for df in frames:
    df = df[df.columns.drop(list(df.filter(regex='Unnamed')))] # Drop columns with "Unnamed" in column name
    df = df.apply(lambda x: x.astype(str).str.upper()) # Convert columns to caps
    df['Unique Name'] = df['Name'] + ' ' + df['Gender'] + ' ' + df['Classification'] + ' ' + df['Silhouette']

如果我为每个数据帧单独运行完全相同的代码。

【问题讨论】:

    标签: python pandas loops


    【解决方案1】:

    您可以尝试以下操作:

    frames = [A,B,C,D,E]
    def update(df):
           df = df[df.columns.drop(list(df.filter(regex='Unnamed')))] # Drop columns with "Unnamed" in column name
           df = df.apply(lambda x: x.astype(str).str.upper()) # Convert columns to caps
           df['Unique Name'] = df['Name'] + ' ' + df['Gender'] + ' ' + df['Classification'] + ' ' + df['Silhouette']
           return df
    for i in frames:
      i = update(i)
       
    

    您的代码的问题是您只是覆盖了df,而不是更新您的实际数据帧。

    【讨论】:

      【解决方案2】:

      您可以在循环内使用frames[i] 而不是df

      for i in range(len(frames)):
        frames[i] = frames[i][frames[i].columns. ...
        ...
      

      因此,您会覆盖列表中的数据框。轻松修改您的代码:

      for i, df in zip(range(len(frames)), frames):
        df = df[df.columns.drop(list(df.filter(regex='Unnamed')))] # Drop columns with "Unnamed" in column name
        df = df.apply(lambda x: x.astype(str).str.upper()) # Convert columns to caps
        df['Unique Name'] = df['Name'] + ' ' + df['Gender'] + ' ' + df['Classification'] + ' ' + df['Silhouette']
      
        frames[i] = df
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-20
        • 2018-10-16
        • 2019-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多