Нашли ошибку?
среднийpandas 3.0.6

concat

Склеить несколько таблиц — одну под другой или рядом.

Нужно знать:DataFrame

Содержание статьи

Коротко

  • pd.concat([df1, df2]) ставит таблицы одну под другой; столбцы сопоставляются по именам.
  • Недостающие в какой-то таблице столбцы заполняются NaN; join="inner" — оставить только общие.
  • Индексы сохраняются и могут повторяться — обычно передают ignore_index=True.
  • keys=[…] добавляет внешний уровень индекса — видно, из какой таблицы строка.
  • axis=1 — рядом, по совпадающему индексу. Для объединения по значениям столбца-ключа нужен merge.

Синтаксис

pd.concat(objs, axis=0, join="outer", ignore_index=False, keys=None)

Параметры

ПараметрЧто делаетПо умолчанию
objsсписок таблиц или Seriesобязательный
axis0 — одна под другой, 1 — рядом0
join"outer" — все столбцы, "inner" — только общие"outer"
ignore_indexновый индекс 0, 1, 2…False
keysметки частей для внешнего уровня индексаNone

Примеры

Данные для примеровиспользуются во всех примерах ниже
jan = pd.DataFrame({"city": ["Омск", "Тула"], "cups": [120, 95]})
feb = pd.DataFrame({"city": ["Омск", "Сочи"], "cups": [130, 60]})
Одна под другой
pd.concat([jan, feb])                          # индекс повторяется
Вывод
   city  cups
0  Омск   120
1  Тула    95
0  Омск   130
1  Сочи    60
Новый индекс
pd.concat([jan, feb], ignore_index=True)
Вывод
   city  cups
0  Омск   120
1  Тула    95
2  Омск   130
3  Сочи    60
Метки частей
pd.concat([jan, feb], keys=["янв", "фев"])     # откуда строка — во внешнем уровне индекса
Вывод
       city  cups
янв 0  Омск   120
    1  Тула    95
фев 0  Омск   130
    1  Сочи    60
Разные столбцы
extra = pd.DataFrame({"city": ["Пермь"], "rating": [4.7]})
pd.concat([jan, extra], ignore_index=True)     # недостающие столбцы — NaN
Вывод
    city   cups  rating
0   Омск  120.0     NaN
1   Тула   95.0     NaN
2  Пермь    NaN     4.7
Только общие столбцы
extra = pd.DataFrame({"city": ["Пермь"], "rating": [4.7]})
pd.concat([jan, extra], join="inner", ignore_index=True)   # только общие столбцы
Вывод
    city
0   Омск
1   Тула
2  Пермь
Рядом по индексу
prices = pd.DataFrame({"price": [180, 165]})
pd.concat([jan, prices], axis=1)               # рядом; строки сопоставляются по индексу
Вывод
   city  cups  price
0  Омск   120    180
1  Тула    95    165

Подводные камни

concat в цикле

Каждый concat копирует все данные, поэтому склейка по одной строке в цикле работает за квадратичное время. Собирайте части в список и склеивайте один раз.

Список частей и один concat
parts = []
for month, cups in [("янв", 120), ("фев", 130), ("мар", 110)]:
    parts.append(pd.DataFrame({"month": [month], "cups": [cups]}))
pd.concat(parts, ignore_index=True)            # собрать части в список и склеить один раз
Вывод
  month  cups
0   янв   120
1   фев   130
2   мар   110

DataFrame.append удалён

Вызов appendошибка: AttributeError
jan.append(feb)
Ошибка
AttributeError: 'DataFrame' object has no attribute 'append'