Объединение двух фреймов данных, когда имена столбцов разные

#pandas #dataframe #merge

#панды #фрейм данных #поглощать

Вопрос:

Я пытаюсь объединить пару файлов excel в один большой файл excel. Проблема в том, что имена столбцов в этих файлах разные, хотя данные одни и те же. Другими словами — для одного и того же значения ячейки столбец один раз называется «a» и один раз «b». Когда я объединяю эти файлы, вместо того, чтобы помещать все данные под одни и те же имена столбцов, данные из каждого файла помещаются в разные столбцы. Так что то, как это выглядит в Соединенных Штатах, далеко не великолепно.

Как я могу проверить, имеют ли два столбца одно и то же имя, а затем объединить данные, чтобы они попали в один и тот же столбец? Вот названия столбцов-

файл1.столбцы

 Index(['Day', 'Month', 'Year', 'Station', 'Sample ID', 'Syn Conc. (#/mL)',  'Euk Conc. (#/mL)', 'Pro Conc. (#/mL)', **'Hetero Bact. Conc. (#/mL)'**,  'FCS Syn / FCS beads medians ratio',  'FCS Euk / FCS beads medians ratio',  'FCS Pro / FCS beads medians ratio',  'SCS Syn / SCS beads medians ratio',  'SCS Euk / SCS beads medians ratio',  'SCS Pro / SCS beads medians ratio'],  dtype='object')  

файл2.столбцы

 Index(['Day', 'Month', 'Year ', 'Station ', 'Depth (m)', 'Syn Conc. (#/mL)',  'Euk Conc. (#/mL)', 'Pro Conc. (#/mL)', 'Pro-Violet Conc. (#/mL)',  **'Hetero Bacteria**', 'FCS Syn / FCS beads medians ratio',  'FCS Euk / FCS beads medians ratio',  'FCS Pro / FCS beads medians ratio',  'FCS Pro-Violet / FCS beads medians ratio',  'SCS Syn / SCS beads medians ratio',  'SCS Euk / SCS beads medians ratio',  'SCS Pro / SCS beads medians ratio',  'SCS Pro-Violet / SCS beads medians ratio',  'Red FL Syn / Red FL beads medians ratio',  'Red FL Euk / Red FL beads medians ratio',  'Red FL Pro / Red FL beads medians ratio',  'Red FL Pro-Violet / Red FL beads medians ratio',  'Orange FL Syn / Orange FL beads medians ratio', 'Analysis Date'],  dtype='object')  

Заранее спасибо ребятам и девчонкам, Карин 🙂

Ответ №1:

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

 df2.rename({'Hetero Bacteria': 'Hetero Bact. Conc. (#/mL)'})  

Обратите внимание, что операция не выполняется, поэтому либо сделайте:

 df2 = df2.rename({'Hetero Bacteria': 'Hetero Bact. Conc. (#/mL)'})  

или используйте переименованный фрейм данных в вашей команде слияния (я предполагаю, что это так concat ).:

 pd.concat([df1, df2.rename({'Hetero Bacteria': 'Hetero Bact. Conc. (#/mL)'})])  

Комментарии:

1. Спасибо! но кажется, что, хотя имена столбцов идентичны, он все равно создает другой столбец (с тем же именем…) и помещает туда значения. Я, кажется, не могу понять, почему он добавляет одни и те же столбцы в отдельный 🙁

2. Пожалуйста, приведите минимальный пример (два небольших кадра данных, команда, которую вы используете для объединения, и ожидаемый результат, который вам не удается получить).