#python #pandas #csv #concat
#python #pandas #csv #объединение
Вопрос:
я пытаюсь объединить два csv
файла с одинаковой структурой в один объединенный csv
файл, но когда я это делаю, столбцы переставляются в другом порядке, и мне не хватает данных из одного из моих csv
файлов.
Я проверил оба файла, чтобы убедиться, что их столбцы соответствуют одному и другому, но когда я выполняю свой код, в одном из моих csv
файлов (переменная b), похоже, отсутствуют данные в столбце «Кровати социального обслуживания DTOC». Я также получаю это сообщение после выполнения кода :
«Предупреждение на будущее: сортировка, поскольку ось без конкатенации не выровнена. Будущая версия pandas изменится на не сортировать по умолчанию. Чтобы принять будущее поведение, передайте 'sort=True'
. Чтобы сохранить текущее поведение и отключить предупреждение, передайте sort=False
»
a=pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/04/MSitDT-FEBRUARY-2019-full-extract-for-publication-td5dtd.csv')
b = pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/03/MSitDT-JANUARY-2019-full-extract-for-publication-5tsrt.csv')
out_put=pd.concat([a,b])
out_put.to_csv( "result.csv", encoding='utf-8-sig')
Я ожидаю csv-файл с объединенными строками в том же порядке столбцов и без данных, отсутствующих в любом из них.
Ответ №1:
Существует несоответствие регистров между заголовками столбцов … например. "Social Care DTOC Beds"
vs "Social Care DTOC beds"
— обратите внимание на нижний регистр «b» в «beds».
Простым решением было бы нормализовать заголовки этих столбцов, используя str.title
(или str.lower
/ str.upper
если вы предпочитаете):
a=pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/04/MSitDT-FEBRUARY-2019-full-extract-for-publication-td5dtd.csv')
b = pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/03/MSitDT-JANUARY-2019-full-extract-for-publication-5tsrt.csv')
a.columns = a.columns.str.title()
b.columns = b.columns.str.title()
out_put = pd.concat([a, b])[a.columns]
Комментарии:
1. Спасибо за решение, есть ли какая-либо причина, по которой столбец был изменен, я понимаю недостающие данные, поскольку было несоответствие, но я не могу понять смысл перестановки столбцов.
2. Не совсем уверен. Если
DataFrame
они работают так же, как и в pythondict
, то по умолчанию они неупорядочены (если «столбцы» эквивалентны «ключам» соответственно). Чтобы гарантировать сохранение порядка, вы можете использоватьout_put = pd.concat([a, b])[a.columns]