Каковы аргументы "уровней", "ключей" и имен в функции concat Pandas?
вопросы
- как использовать
pd.concat
? - что такое
1 ответ:
в процессе ответа на этот вопрос для себя я узнал много вещей, и я хотел собрать каталог примеров и пояснений.
конкретный ответ на вопрос как
pd.concat
может обрабатывать более двух объектов для слияния.в случае
d1
иd2
параметры выглядеть так:
outer
pd.concat([d1, d2], axis=1, join='outer') A B C B C D 1 NaN NaN NaN 0.4 0.5 0.6 2 0.1 0.2 0.3 0.4 0.5 0.6 3 0.1 0.2 0.3 NaN NaN NaN
inner
pd.concat([d1, d2], axis=1, join='inner') A B C B C D 2 0.1 0.2 0.3 0.4 0.5 0.6
join_axes
четвертый аргумент-это то, что позволяет нам делать наши
left
слияния и больше.join_axes: список объектов Index
Конкретные индексы, используемые для других осей n - 1 вместо выполнения внутренней/внешней логики набора.Левое Слияние
pd.concat([d1, d2, d3], axis=1, join_axes=[d1.index]) A B C B C D A B D 2 0.1 0.2 0.3 0.4 0.5 0.6 NaN NaN NaN 3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
Право Слияния
pd.concat([d1, d2, d3], axis=1, join_axes=[d3.index]) A B C B C D A B D 1 NaN NaN NaN 0.4 0.5 0.6 0.7 0.8 0.9 3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
ignore_index
ignore_index: boolean, по умолчанию False
Если True, не используйте значения Индекса вдоль оси сочленения. Полученная ось будет помечена как 0, ..., П - 1. Это полезно, если вы объединяете объекты, где ось объединения не имеет значимой информации индексирования. Обратите внимание, что значения индекса на других осях по-прежнему соблюдаются в соединении.например, когда я ставлю
d1
наd2
, если я не забочусь о значениях индекса, я мог бы сбросить их или игнорировать их.| pd.concat( | pd.concat( | [d1, d2], | [d1, d2] pd.concat([d1, d2]) | ignore_index=True) | ).reset_index(drop=True) --------------------- | ----------------------- | ------------------------- A B C D | A B C D | A B C D 2 0.1 0.2 0.3 NaN | 0 0.1 0.2 0.3 NaN | 0 0.1 0.2 0.3 NaN 3 0.1 0.2 0.3 NaN | 1 0.1 0.2 0.3 NaN | 1 0.1 0.2 0.3 NaN 1 NaN 0.4 0.5 0.6 | 2 NaN 0.4 0.5 0.6 | 2 NaN 0.4 0.5 0.6 2 NaN 0.4 0.5 0.6 | 3 NaN 0.4 0.5 0.6 | 3 NaN 0.4 0.5 0.6
и при использовании
axis=1
:| pd.concat( | [d1, d2], axis=1, pd.concat([d1, d2], axis=1) | ignore_index=True) ------------------------------- | ------------------------------- A B C B C D | 0 1 2 3 4 5 1 NaN NaN NaN 0.4 0.5 0.6 | 1 NaN NaN NaN 0.4 0.5 0.6 2 0.1 0.2 0.3 0.4 0.5 0.6 | 2 0.1 0.2 0.3 0.4 0.5 0.6 3 0.1 0.2 0.3 NaN NaN NaN | 3 0.1 0.2 0.3 NaN NaN NaN
keys
мы можем передать список скалярных значений или кортежей, чтобы присвоить кортеж или скалярные значения соответствующим Мультииндексам. Длина передаваемого списка должна быть такой же, как и количество элементов, которые объединяются.
ключи: последовательность, по умолчанию none
Если несколько уровней пройдены, должны содержать кортежи. Построить иерархический индекс, используя переданные ключи как самый внешний уровень
axis=0
сцепя
Series
объекты вдольaxis=0
(расширение индекса).эти ключи, становятся новым начальным уровнем a
MultiIndex
объект в атрибуте индекса., мы можем использовать больше, чем скалярные значения в# length 3 length 3 # length 2 length 2 # /--------\ /-----------\ # /----\ /------\ pd.concat([s1, s2, s3], keys=['A', 'B', 'C']) pd.concat([s1, s2], keys=['A', 'B']) ---------------------------------------------- ------------------------------------- A 2 1 A 2 1 3 2 3 2 B 1 3 B 1 3 2 4 2 4 C 1 5 dtype: int64 3 6 dtype: int64
keys
аргумент для создания еще более глубокогоMultiIndex
. Здесь мы проходимtuples
длины 2 добавить два новых уровня aMultiIndex
:pd.concat( [s1, s2, s3], keys=[('A', 'X'), ('A', 'Y'), ('B', 'X')]) ----------------------------------------------- A X 2 1 3 2 Y 1 3 2 4 B X 1 5 3 6 dtype: int64
axis=1
это немного отличается при расширении вдоль столбцов. Когда мы использовали
Вариации из двухaxis=0
(см. выше) нашиkeys
выступилаMultiIndex
уровни в дополнение к существующему индексу. Ибоaxis=1
, мы имеем в виду ось, котораяSeries
объектов нет, а именно .Series
wtihaxis=1
обратите внимание, что называя
s1
иs2
имеет значение, пока нетkeys
are передано, но оно переопределяется, если есть.| | | pd.concat( | pd.concat( | pd.concat( | [s1.rename('U'), pd.concat( | [s1, s2], | [s1.rename('U'), | s2.rename('V')], [s1, s2], | axis=1, | s2.rename('V')], | axis=1, axis=1) | keys=['X', 'Y']) | axis=1) | keys=['X', 'Y']) -------------- | --------------------- | ---------------------- | ---------------------- 0 1 | X Y | U V | X Y 1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0 2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0 3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN
MultiIndex
сSeries
иaxis=1
Дваpd.concat( [s1, s2], axis=1, keys=[('W', 'X'), ('W', 'Y')]) ----------------------------------- W X Y 1 NaN 3.0 2 1.0 4.0 3 2.0 NaN
DataFrame
Сaxis=1
С
axis=0
примерыkeys
добавить уровни кMultiIndex
, но на этот раз к объекту, хранящемуся в .pd.concat( | pd.concat( [d1, d2], | [d1, d2], axis=1, | axis=1, keys=['X', 'Y']) | keys=[('First', 'X'), ('Second', 'X')]) ------------------------------- | -------------------------------------------- X Y | First Second A B C B C D | X X 1 NaN NaN NaN 0.4 0.5 0.6 | A B C B C D 2 0.1 0.2 0.3 0.4 0.5 0.6 | 1 NaN NaN NaN 0.4 0.5 0.6 3 0.1 0.2 0.3 NaN NaN NaN | 2 0.1 0.2 0.3 0.4 0.5 0.6 | 3 0.1 0.2 0.3 NaN NaN NaN
Series
иDataFrame
Сaxis=1
это сложно. В этом случае скалярное значение ключа не может выступать в качестве единственного уровня индекса для на
Series
объект как источник имени столбца.Ограниченияpd.concat( | pd.concat( [s1, d1], | [s1.rename('Z'), d1], axis=1, | axis=1, keys=['X', 'Y']) | keys=['X', 'Y']) --------------------- | -------------------------- X Y | X Y 0 A B C | Z A B C 2 1 0.1 0.2 0.3 | 2 1 0.1 0.2 0.3 3 2 0.1 0.2 0.3 | 3 2 0.1 0.2 0.3
keys
иMultiIndex
вывод.кажется, что панды только выводят имена столбцов из
Series
имя, но оно не будет заполнять пробелы при выполнении аналогичной конкатенации среди фреймов данных с другим числом столбцов уровни.d1_ = pd.concat( [d1], axis=1, keys=['One']) d1_ One A B C 2 0.1 0.2 0.3 3 0.1 0.2 0.3
затем объедините это с другим фреймом данных только с одним уровнем в объекте столбцов, и панды откажутся пытаться сделать кортежи
MultiIndex
объект и объединить все фреймы данных, как если бы один уровень объектов, скаляров и кортежей.pd.concat([d1_, d2], axis=1) (One, A) (One, B) (One, C) B C D 1 NaN NaN NaN 0.4 0.5 0.6 2 0.1 0.2 0.3 0.4 0.5 0.6 3 0.1 0.2 0.3 NaN NaN NaN
передает
dict
вместоlist
при передаче словаря,
pandas.concat
будет использовать ключи из словаря, какkeys
параметр.# axis=0 | # axis=1 pd.concat( | pd.concat( {0: d1, 1: d2}) | {0: d1, 1: d2}, axis=1) ----------------------- | ------------------------------- A B C D | 0 1 0 2 0.1 0.2 0.3 NaN | A B C B C D 3 0.1 0.2 0.3 NaN | 1 NaN NaN NaN 0.4 0.5 0.6 1 1 NaN 0.4 0.5 0.6 | 2 0.1 0.2 0.3 0.4 0.5 0.6 2 NaN 0.4 0.5 0.6 | 3 0.1 0.2 0.3 NaN NaN NaN
levels
это используется в сочетании с