Я боролся с добавлением нескольких 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()]
, но пока не повезло
Есть также дубликаты столбцов, которые я хотел бы сохранить.
Большое вам спасибо за помощь