Python Pandas-在for循环中附加具有不同列的数据帧
我一直在努力用不同的Python Pandas-在for循环中附加具有不同列的数据帧,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我一直在努力用不同的列添加多个数据帧,非常感谢您对这个问题的帮助 我的原始数据集如下所示 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\u cs
列添加多个数据帧
,非常感谢您对这个问题的帮助
我的原始数据集如下所示
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\u csv\u data(csv\u data,row)
函数,首先在最后一行添加name
。然后我将transpose
并将name
移动到每个DataFrame
的最后一列,使每个DataFrame
在追加之前(但在将最后一列移到前面之前)看起来如下
问题是用不同数量的列添加数据帧
,每个数据帧
包含两行,包括标题
和数据
transform\u csv\u data
helper函数的代码如下所示
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
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+')
我添加数据帧的主要功能如下所示
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
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
列返回到列的末尾时,格式会变得奇怪
final =
name height color weight speed
Joe 10 25 3 33
Bob 51 25 30 33
Chris 51 25 nan 30
如何正确地附加所有数据帧
,以便将数据
附加到其相应的列
我尝试过添加concat
,merge
,df_output=df_output.append(df_行)[df_output.columns.tolist()]
,但到目前为止没有成功
还有我想保留的重复列
非常感谢您的帮助df1=pd.read\u csv('x',index\u col=[0],header=[0,1])。。;pd.concat([df1,df2,df3],轴=1)