Объединить кадры данных на основе столбца с разными строками - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть несколько CSV-файлов, которые я читаю в отдельные фреймы данных на основе их имени в каталоге, например,

# ask user for path
path = input('Enter the path for the csv files: ')
os.chdir(path)

# loop over filenames and read into individual dataframes
for fname in os.listdir(path):
    if fname.endswith('Demo.csv'):
        demoRaw = pd.read_csv(fname, encoding = 'utf-8')
    if fname.endswith('Key2.csv'):
        keyRaw = pd.read_csv(fname, encoding = 'utf-8')

Затем я фильтрую, чтобы сохранить только определенные столбцы

# filter to keep desired columns only
demo = demoRaw.filter(['Key', 'Sex', 'Race', 'Age'], axis=1)
key = keyRaw.filter(['Key', 'Key', 'Age'], axis=1)

Затем я создаю список вышеупомянутых фреймов данных и использую Reduce для их объединения на Key

# create list of data frames for combined sheet
dfs = [demo, key]

# merge the list of data frames on the Key
combined = reduce(lambda left,right: pd.merge(left,right,on='Key'), dfs)

Затем я опускаю автоматически сгенерированный столбец, создаю программу записи Excel и записываю в csv

# drop the auto generated index colulmn
combined.set_index('RecordKey', inplace=True)

# create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('final.xlsx', engine='xlsxwriter')

# write to csv
combined.to_excel(writer, sheet_name='Combined')
meds.to_excel(writer, sheet_name='Meds')

# Close the Pandas Excel writer and output the Excel file.
writer.save()

Проблема в том, что в некоторых файлах есть ключи, которых нет в других.Например,

Демонстрационный файл

Key   Sex   Race   Age
1      M     W     52
2      F     B     25
3      M     L     78

Файл ключа

Key   Key2   Age
1      7325     52
2      4783     25
3      1367     78
4      9435     21
5      7247     65

В настоящее время он будет включать строки только в том случае, если в каждой есть соответствующий ключ (другими словамион просто пропускает строки с ключами, которых нет в других файлах).Как я могу объединить все строки из всех файлов, даже если ключи не совпадают?Таким образом, конечный результат будет выглядеть так:

Key   Sex   Race   Age   Key2   Age
 1      M     W     52    7325     52
 2      F     B     25    4783     25
 3      M     L     78    1367     78
 4                        9435     21
 5                        7247     65

Мне все равно, пустые ячейки - это пробелы, NaN, # N / A и т. Д. До тех пор, пока я могу их идентифицировать.

1 Ответ

0 голосов
/ 03 декабря 2018

Заменить combined = reduce(lambda left,right: pd.merge(left,right,on='Key'), dfs) на: combined=pd.merge(demo,key, how='outer', on='Key') Вам нужно будет указать "внешний", чтобы объединить как полную таблицу Key, так и Demo

...