Hallo, ich habe die folgenden Datenrahmen:
> 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
Wie füge ich die Indizes zusammen, um Folgendes zu erhalten:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Ich frage, weil ich es verstehe, merge()
dh df1.merge(df2)
Spalten verwendet, um den Abgleich durchzuführen. In der Tat bekomme ich dabei:
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
Ist es eine schlechte Praxis, auf Index zusammenzuführen? Es ist unmöglich? Wenn ja, wie kann ich den Index in eine neue Spalte mit dem Namen "index" verschieben?
Vielen Dank
df1.join(df2)
Antworten:
Verwenden Sie
merge
standardmäßig den inneren Join:Oder
join
, was standardmäßig verbunden bleibt:Oder
concat
, was standardmäßig Outer Join ist:Beispiele :
quelle
.transpose()
prüfen Sie, ob Sie eines Ihrer dfs benötigen, um die Indizes zu synchronisieren - das war mein Problemconcat
df währenddessen in Klammern gesetzt werdenjoin
undmerge
nicht?dfs = [df1, df2, df3,... dfn]
und danndf = pd. concat(dfs)
Sie können concat ([df1, df2, ...], axis = 1) verwenden, um zwei oder mehr DFs zu verketten, die durch Indizes ausgerichtet sind:
oder fusionieren durch benutzerdefinierte Felder / Indizes für verketten:
oder beitreten, um sich nach Index anzumelden:
quelle
Standardmäßig:
join
ist eine spaltenweise linke Verknüpfungpd.merge
ist eine spaltenweise innere Verknüpfungpd.concat
ist eine zeilenweise äußere Verknüpfungpd.concat
:nimmt Iterable Argumente. Daher kann DataFrames nicht direkt verwendet werden (Verwendung
[df,df2]
)Abmessungen von DataFrame sollten entlang der Achse übereinstimmen
Join
undpd.merge
:können DataFrame-Argumente annehmen
quelle
Ein dummer Fehler, der mich erwischt hat: Die Verknüpfungen sind fehlgeschlagen, weil der Index
dtypes
unterschiedlich war. Dies war nicht offensichtlich, da beide Tabellen Pivot-Tabellen derselben Originaltabelle waren. Nach demreset_index
sahen die Indizes in Jupyter identisch aus. Es kam erst beim Speichern in Excel zum Vorschein ...Behoben mit:
df1[['key']] = df1[['key']].apply(pd.to_numeric)
Hoffentlich spart das jemandem eine Stunde!
quelle
Wenn Sie zwei Datenrahmen in Pandas verbinden möchten, können Sie einfach verfügbare Attribute wie
merge
oder verwendenconcatenate
. Zum Beispiel, wenn ich zwei Datenrahmen habedf1
unddf2
sie verbinden kann durch:quelle