我一直在努力追加多个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
包含两行,包括Data
和transform_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
?
我尝试添加merge
,df_output = df_output.append(df_row)[df_output.columns.tolist()]
,MapView
但到目前为止没有运气
我还想保留重复的列。
非常感谢你的帮助