Pandas concat
pd.concat склеивает несколько DataFrame или Series по строкам
(axis=0) или по столбцам (axis=1). В отличие от merge, общий ключ
здесь не нужен — Pandas просто выравнивает данные по индексу/столбцам.
Когда использовать
Слить логи с нескольких устройств в один.
Добавить новые записи к старой таблице.
Поставить рядом две версии одного измерения для сравнения.
Пример 1. Склейка по строкам
import pandas as pd
a = pd.DataFrame({"v": [1, 2]})
b = pd.DataFrame({"v": [3, 4]})
print(pd.concat([a, b]))
Output:
v
0 1
1 2
0 3
1 4
Индексы повторились — это сюрприз.
Пример 2. ignore_index=True
import pandas as pd
a = pd.DataFrame({"v": [1, 2]})
b = pd.DataFrame({"v": [3, 4]})
print(pd.concat([a, b], ignore_index=True))
Output:
v
0 1
1 2
2 3
3 4
Пример 3. По столбцам
import pandas as pd
a = pd.DataFrame({"a": [1, 2]})
b = pd.DataFrame({"b": [10, 20]})
print(pd.concat([a, b], axis=1))
Output:
a b
0 1 10
1 2 20
Пример 4. Разные столбцы
import pandas as pd
a = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
b = pd.DataFrame({"b": [5, 6], "c": [7, 8]})
print(pd.concat([a, b], ignore_index=True))
Output:
a b c
0 1.0 3 NaN
1 2.0 4 NaN
2 NaN 5 7.0
3 NaN 6 8.0
Недостающие значения заполнены NaN.
Пример 5. join="inner"
import pandas as pd
a = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
b = pd.DataFrame({"b": [5, 6], "c": [7, 8]})
print(pd.concat([a, b], join="inner", ignore_index=True))
Output:
b
0 3
1 4
2 5
3 6
Остался только общий столбец.
Пример 6. Метки источника через keys
import pandas as pd
a = pd.DataFrame({"v": [1, 2]})
b = pd.DataFrame({"v": [3, 4]})
print(pd.concat([a, b], keys=["bot1", "bot2"]))
Output:
v
bot1 0 1
1 2
bot2 0 3
1 4
Получился MultiIndex — удобно для дальнейшего groupby.
Пример 7. Series вместо столбцов
import pandas as pd
s1 = pd.Series([1, 2], name="a")
s2 = pd.Series([10, 20], name="b")
print(pd.concat([s1, s2], axis=1))
Output:
a b
0 1 10
1 2 20
Подводные камни
По умолчанию
concatсохраняет старые индексы — после этого их часто нужно сбрасывать.Конкатенация большого числа маленьких
DataFrameмедленная — лучше собрать в список и сделать одинconcat, чем приклеивать по одному.Типы столбцов могут «расшириться» до
object, если в разных кусках они отличаются.
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.