У меня есть несколько 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 и т. Д. До тех пор, пока я могу их идентифицировать.