Pandas - 在for循环

时间:2018-05-08 02:02:57

标签: python pandas numpy dataframe

我一直在努力追加多个DataFrames columns,并且非常感谢您对这个问题的帮助!

我的原始数据集如下所示

 df1 = height 10
       color  25
       weight 3
       speed  33

 df2 = height 51
       color  25
       weight 30
       speed  33

 df3 = height 51
       color  25
       speed 30

我调用transform_csv_data(csv_data, row)函数首先在最后一行添加name。然后我transpose并将name移动到每个DataFrame的第一列的最后一列,以便每个DataFrame在添加前看起来如下(但在移动最后一列之前)到前面)

df1 = 
   0        1       2       3       4
0  height   color   weight  speed   name
1  10       25      3       33      Joe

df2 =
   0        1       2       3       4
0  height   color   weight  speed   name
1  51       25      30      33      Bob

df3 = 
   0        1       2       3        
0  height   color   speed   name    
1  51       25      30      Chris

问题是DataFrames添加的columns数量不同,DataFrame每个header包含两行,包括Datatransform_csv_data,如上所述。

def transform_csv_data(self, csv_data, row): df = pd.DataFrame(list(csv_data)) df = df.iloc[:, [0, -2]] # all rows with first and second last column df.loc[len(df)] = ['name', row] df = df.transpose() cols = df.columns.values.tolist() # this returns index of each column cols.insert(0, cols.pop(-1)) # move last column to front df = df.reindex(columns=cols) return df 辅助函数的代码如下所示

DataFrame

我追加def aggregate_data(self, output_data_file_path): df_output = pd.DataFrame() rows = ['Joe', 'Bob', 'Chris'] for index, row in enumerate(rows): csv_data = self.read_csv_url(row) df = self.transform_csv_data(csv_data, row) # ignore header unless first set of data is being processed if index != 0 or append: df = df[1:] df_output = df_output.append(df) df_output.to_csv(output_data_file_path, index=False, header=False, mode='a+') 的主要功能如下所示

DatFrame

我希望我的最终附加name如下所示,但随着column列回到final = name height color weight speed Joe 10 25 3 33 Bob 51 25 30 33 Chris 51 25 nan 30

的结尾,格式变得奇怪
DataFrame

如何正确附加所有data,以便column附加到相应的concat

我尝试添加mergedf_output = df_output.append(df_row)[df_output.columns.tolist()]MapView但到目前为止没有运气

我还想保留重复的列。

非常感谢你的帮助

0 个答案:

没有答案