Salut, j'ai les dataframes suivants:
> 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
Comment fusionner les indices pour obtenir:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Je demande parce que je crois comprendre que merge()
c'est à dire df1.merge(df2)
utilise des colonnes pour faire la correspondance. En fait, en faisant cela, j'obtiens:
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
Est-ce une mauvaise pratique de fusionner sur l'index? Est-ce impossible? Si tel est le cas, comment puis-je déplacer l'index dans une nouvelle colonne appelée «index»?
Merci
df1.join(df2)
Réponses:
Utilisez
merge
, qui est une jointure interne par défaut:Ou
join
, qui reste jointe par défaut:Ou
concat
, qui est une jointure externe par défaut:Échantillons :
la source
.transpose()
un de vos dfs pour synchroniser les index - c'était mon problèmeconcat
-il mettre df entre parenthèsesjoin
etmerge
non?dfs = [df1, df2, df3,... dfn]
et puisdf = pd. concat(dfs)
vous pouvez utiliser concat ([df1, df2, ...], axis = 1) afin de concaténer deux ou plusieurs DF alignés par des index:
ou fusionner pour concaténer par champs / index personnalisés:
ou rejoindre pour rejoindre par index:
la source
Par défaut:
join
est une jointure gauchepd.merge
par colonnepd.concat
est une jointure interne par colonne est une jointure externe par lignepd.concat
:prend des arguments Iterable. Ainsi, il ne peut pas prendre des DataFrames directement (utiliser
[df,df2]
) Lesdimensions de DataFrame doivent correspondre le long de l'axe
Join
etpd.merge
:peut prendre des arguments DataFrame
la source
Un bogue idiot qui m'a attrapé: les jointures ont échoué parce que l'index était
dtypes
différent. Ce n'était pas évident car les deux tableaux étaient des tableaux croisés dynamiques du même tableau d'origine. Aprèsreset_index
, les indices semblaient identiques dans Jupyter. Cela n'est apparu que lors de l'enregistrement dans Excel ...Fixé avec:
df1[['key']] = df1[['key']].apply(pd.to_numeric)
Espérons que cela sauve quelqu'un une heure!
la source
Si vous voulez joindre deux dataframes dans pandas, vous pouvez simplement utiliser les attributs disponibles comme
merge
ouconcatenate
. Par exemple, si j'ai deux dataframesdf1
et quedf2
je peux les rejoindre en:la source