【问题标题】:Connecting DataFrames via for loop通过 for 循环连接 DataFrame
【发布时间】:2021-12-13 03:03:06
【问题描述】:

我想通过 for 循环和 concat 函数组合多个数据帧,并将结果保存在名为 all_dfs 的数据帧中,但不知何故,当 for 循环运行时,它总是会踢出之前在 all_dfs 中的 df。 有什么提示可以解决这个问题吗?

for i in vd_files_list:
    
    ### Den Szenario-Namen ohne VD herausfiltern
    print(i)
    scenario_name_w_vd = i.split("/")[-1]
    scenario_name = scenario_name_w_vd.split(".")[0]


    try:
        
        VD_filename = r"{}".format(i)
        df = pd.read_csv(filepath_or_buffer=VD_filename,
                         skiprows=(13),
                         names =("Attribute", "Commodity", "Process", "Period","Region", "Vintage", "TimeSlice", "UserConstraint","PV"),
                        dtype={"Attribute":str, "Commodity":str, "Process":str, "Period":str,"Region":str, "Vintage":str, "TimeSlice":str, "UserConstraint":str,"PV":float})

        #hier wird eine extra Spalte "Szenario" mit dem Szenario-Namen hinzugefügt
        df["Szenario"] = scenario_name
            
        all_dfs = pd.concat([df])
        print(all_dfs)
        
        

【问题讨论】:

    标签: python pandas dataframe concatenation


    【解决方案1】:

    它几乎解决了这个问题!我唯一改变的是写 all_dfs = all_dfs.append(df) 而不是 all_dfs.append(df)

    这是工作代码现在的样子(加上我添加了例外):

    all_dfs = pd.DataFrame()
    
    for i in vd_files_list:
        
        ### Den Szenario-Namen ohne VD herausfiltern
        print(i)
        scenario_name_w_vd = i.split("/")[-1]
        scenario_name = scenario_name_w_vd.split(".")[0]
    
    
        try:
            
            VD_filename = r"{}".format(i)
            df = pd.read_csv(filepath_or_buffer=VD_filename,
                             skiprows=(13),
                             names =("Attribute", "Commodity", "Process", "Period","Region", "Vintage", "TimeSlice", "UserConstraint","PV"),
                            dtype={"Attribute":str, "Commodity":str, "Process":str, "Period":str,"Region":str, "Vintage":str, "TimeSlice":str, "UserConstraint":str,"PV":float})
    
            #hier wird eine extra Spalte "Szenario" mit dem Szenario-Namen hinzugefügt
            df["Szenario"] = scenario_name
            
            
            all_dfs = all_dfs.append(df)
            
            print(all_dfs)
            
           
            
        except ValueError:
                tk.messagebox.showerror("Information", "Die ausgewählte Datei ist ungültig")
                return None
        except FileNotFoundError:
                tk.messagebox.showerror("Information", f" Die Datei {file_path} existiert nicht")
                return None
    

    【讨论】:

      【解决方案2】:

      all_dfs 变量的范围是本地的 inside 你的for 循环。在循环之前将其初始化为新的 DataFrame,然后在每次迭代时附加到它。

      all_dfs = pd.DataFrame()
      
      for i in vd_files_list:
          ### Den Szenario-Namen ohne VD herausfiltern
          print(i)
          scenario_name_w_vd = i.split("/")[-1]
          scenario_name = scenario_name_w_vd.split(".")[0]
      
      
          try:
              VD_filename = r"{}".format(i)
              df = pd.read_csv(filepath_or_buffer=VD_filename,
                               skiprows=(13),
                               names =("Attribute", "Commodity", "Process", "Period","Region", "Vintage", "TimeSlice", "UserConstraint","PV"),
                              dtype={"Attribute":str, "Commodity":str, "Process":str, "Period":str,"Region":str, "Vintage":str, "TimeSlice":str, "UserConstraint":str,"PV":float})
      
              #hier wird eine extra Spalte "Szenario" mit dem Szenario-Namen hinzugefügt
              df["Szenario"] = scenario_name
                  
              all_dfs.append(df)
          except:
              # what errors do you need to handle?
              pass
      
      print(all_dfs)
      

      【讨论】:

        猜你喜欢
        • 2021-01-21
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        • 2018-03-16
        • 2021-05-19
        • 2019-05-22
        • 2015-05-21
        • 1970-01-01
        相关资源
        最近更新 更多