Как исправить объединение pandas при добавлении двух файлов csv

#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 они работают так же, как и в python dict , то по умолчанию они неупорядочены (если «столбцы» эквивалентны «ключам» соответственно). Чтобы гарантировать сохранение порядка, вы можете использовать out_put = pd.concat([a, b])[a.columns]