Проблема слияния файлов .xlsx с пандами - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю с python 2.7 и написал сценарий, который должен принимать имя двух файлов .xlsx, использовать панд для преобразования их в два кадра данных и затем объединять их.Два рассматриваемых файла имеют одинаковые строки и разные столбцы.По сути, у меня есть эти два файла Excel:

enter image description here enter image description here

Я хотел бы сохранить те же строки и просто объединитьколонны.Код выглядит следующим образом:

import pandas as pd

file1 = 'file1.xlsx'
file2 = 'file2.xlsx'
sheet10 = pd.read_excel(file1, sheet_name = 0)
sheet20 = pd.read_excel(file2, sheet_name = 0)

conc1 = pd.concat([sheet10, sheet20], sort = False)
output = pd.ExcelWriter('output.xlsx')
conc1.to_excel(output, 'Sheet 1')
output.save()

Вместо того, чтобы делать то, что я ожидал (учитывая примеры, которые я читаю онлайн), вывод будет выглядеть примерно так:

enter image description here

Кто-нибудь знает, могу ли я улучшить свой сценарий?Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Лучший ответ здесь действительно зависит от точной формы ваших данных.Исходя из предоставленного вами примера, похоже, что данные индексируются одинаково между двумя фреймами данных с разными заголовками столбцов, которые вы хотите сохранить.Если это так, то это было бы лучшим решением:

import pandas as pd

file1 = 'file1.xlsx'
file2 = 'file2.xlsx'
sheet10 = pd.read_excel(file1, sheet_name = 0)
sheet20 = pd.read_excel(file2, sheet_name = 0)

conc1 = sheet10.merge(sheet20, how="left", left_index=True, right_index=True)
output = pd.ExcelWriter('output.xlsx')
conc1.to_excel(output, sheet_name='Sheet 1', ignore_index=True)
output.save()

Поскольку существует прямое соответствие между количеством строк в двух исходных кадрах данных, на самом деле не имеет значения, если слева, справа, внешнийили используется внутреннее соединение.В этом примере я использовал левое соединение.

Если строки в двух фреймах данных не идеально выровнены, выбранный метод соединения может оказать огромное влияние на ваш вывод.Я рекомендую ознакомиться с документацией pandas по merge / join / concatenate , прежде чем идти дальше.

0 голосов
/ 27 сентября 2018

Чтобы получить ожидаемый результат, используя pd.concat, имена столбцов в обоих кадрах данных должны быть одинаковыми.Вот как это сделать,

# Create a 1:1 mapping of sheet10 and sheet20 columns
cols_mapping = dict(zip(sheet20.columns, sheet10.columns))

# Rename the columns in sheet20 to match with that of sheet10
sheet20_renamed = sheet20.rename(cols_mapping, axis=1)

concatenated = pd.concat([sheet10, sheet20_renamed])
...