Привет у меня есть следующие датафреймы:
> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1
> df2
concept
0 A
1 B
Как мне слить по индексам, чтобы получить:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Я спрашиваю, потому что, как я понимаю, то merge()
есть df1.merge(df2)
использует столбцы для сопоставления. Фактически, делая это, я получаю:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
self._validate_specification()
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on
Это плохая практика для слияния по индексу? Это невозможно? Если это так, как я могу переместить индекс в новый столбец под названием «индекс»?
Спасибо
df1.join(df2)
Ответы:
Используйте
merge
, который является внутренним соединением по умолчанию:Или
join
, который оставлен присоединиться по умолчанию:Или
concat
, который является внешним соединением по умолчанию:Образцы :
источник
.transpose()
один из ваших dfs для синхронизации индексов - это было моей проблемойconcat
нужно заключать df в скобки,join
аmerge
не делать?dfs = [df1, df2, df3,... dfn]
и затемdf = pd. concat(dfs)
Вы можете использовать concat ([df1, df2, ...], axis = 1) для объединения двух или более DF, выровненных по индексам:
или объединить для объединения по настраиваемым полям / индексам:
или присоединиться для присоединения по индексу:
источник
По умолчанию:
join
левое соединениеpd.merge
по столбцам. Внутреннее соединение по столбцам.pd.concat
Внешнее соединение по строкам.pd.concat
:принимает итерируемые аргументы. Таким образом, он не может принимать DataFrames напрямую (использовать
[df,df2]
)Размеры DataFrame должны совпадать по оси
Join
иpd.merge
:может принимать аргументы DataFrame
источник
Глупая ошибка, которая меня достала: объединения не состоялись, потому что индекс
dtypes
отличался. Это не было очевидно, поскольку обе таблицы были сводными таблицами одной и той же исходной таблицы. Послеreset_index
этого индексы в Jupyter выглядели одинаково. Выявилась только при сохранении в Excel ...Исправлено с помощью:
df1[['key']] = df1[['key']].apply(pd.to_numeric)
Надеюсь, это сэкономит кому-то час!
источник
Если вы хотите объединить два кадра данных в пандах, вы можете просто использовать доступные атрибуты, такие как
merge
илиconcatenate
. Например, если у меня есть два кадра данных,df1
иdf2
я могу присоединиться к ним:источник