Ich erhalte eine, ValueError: cannot reindex from a duplicate axis
wenn ich versuche, einen Index auf einen bestimmten Wert zu setzen. Ich habe versucht, dies mit einem einfachen Beispiel zu reproduzieren, aber ich konnte es nicht tun.
Hier ist meine Sitzung innerhalb der ipdb
Spur. Ich habe einen DataFrame mit String-Index und Integer-Spalten, Float-Werte. Wenn ich jedoch versuche, einen sum
Index für die Summe aller Spalten zu erstellen , wird eine ValueError: cannot reindex from a duplicate axis
Fehlermeldung angezeigt. Ich habe einen kleinen DataFrame mit denselben Eigenschaften erstellt, konnte das Problem jedoch nicht reproduzieren. Was könnte mir fehlen?
Ich verstehe nicht wirklich, was ValueError: cannot reindex from a duplicate axis
bedeutet, was bedeutet diese Fehlermeldung? Vielleicht hilft mir das bei der Diagnose des Problems, und dies ist der am besten zu beantwortende Teil meiner Frage.
ipdb> type(affinity_matrix)
<class 'pandas.core.frame.DataFrame'>
ipdb> affinity_matrix.shape
(333, 10)
ipdb> affinity_matrix.columns
Int64Index([9315684, 9315597, 9316591, 9320520, 9321163, 9320615, 9321187, 9319487, 9319467, 9320484], dtype='int64')
ipdb> affinity_matrix.index
Index([u'001', u'002', u'003', u'004', u'005', u'008', u'009', u'010', u'011', u'014', u'015', u'016', u'018', u'020', u'021', u'022', u'024', u'025', u'026', u'027', u'028', u'029', u'030', u'032', u'033', u'034', u'035', u'036', u'039', u'040', u'041', u'042', u'043', u'044', u'045', u'047', u'047', u'048', u'050', u'053', u'054', u'055', u'056', u'057', u'058', u'059', u'060', u'061', u'062', u'063', u'065', u'067', u'068', u'069', u'070', u'071', u'072', u'073', u'074', u'075', u'076', u'077', u'078', u'080', u'082', u'083', u'084', u'085', u'086', u'089', u'090', u'091', u'092', u'093', u'094', u'095', u'096', u'097', u'098', u'100', u'101', u'103', u'104', u'105', u'106', u'107', u'108', u'109', u'110', u'111', u'112', u'113', u'114', u'115', u'116', u'117', u'118', u'119', u'121', u'122', ...], dtype='object')
ipdb> affinity_matrix.values.dtype
dtype('float64')
ipdb> 'sums' in affinity_matrix.index
False
Hier ist der Fehler:
ipdb> affinity_matrix.loc['sums'] = affinity_matrix.sum(axis=0)
*** ValueError: cannot reindex from a duplicate axis
Ich habe versucht, dies anhand eines einfachen Beispiels zu reproduzieren, bin aber gescheitert
In [32]: import pandas as pd
In [33]: import numpy as np
In [34]: a = np.arange(35).reshape(5,7)
In [35]: df = pd.DataFrame(a, ['x', 'y', 'u', 'z', 'w'], range(10, 17))
In [36]: df.values.dtype
Out[36]: dtype('int64')
In [37]: df.loc['sums'] = df.sum(axis=0)
In [38]: df
Out[38]:
10 11 12 13 14 15 16
x 0 1 2 3 4 5 6
y 7 8 9 10 11 12 13
u 14 15 16 17 18 19 20
z 21 22 23 24 25 26 27
w 28 29 30 31 32 33 34
sums 70 75 80 85 90 95 100
Antworten:
Dieser Fehler tritt normalerweise auf, wenn Sie einer Spalte beitreten / zuweisen, wenn der Index doppelte Werte enthält. Da Sie einer Zeile zuweisen, vermute ich, dass ein doppelter Wert in vorhanden
affinity_matrix.columns
ist, der in Ihrer Frage möglicherweise nicht angezeigt wird.quelle
affinity_matrix.index
, aber ich denke, dies ist das gleiche Konzept.index
bedeutet dies beidesrow
undcolumn names
verbrachte 20 Minuten mit dem Zeilenindex, stellte sich jedoch heraus, dass ich doppelte Spaltennamen erhalten habe, die diesen Fehler verursacht haben.Wie andere gesagt haben, haben Sie wahrscheinlich doppelte Werte in Ihrem ursprünglichen Index. Um sie zu finden, gehen Sie wie folgt vor:
df[df.index.duplicated()]
quelle
df = df[~df.index.duplicated()]
DatetimeIndex
ed Datenrahmen, können Sieresample
auf die gewünschte Frequenz und dann nehmen.first()
,.mean()
usw.Indizes mit doppelten Werten treten häufig auf, wenn Sie einen DataFrame durch Verketten anderer DataFrames erstellen. WENN Sie sich nicht darum kümmern, die Werte Ihres Index beizubehalten, und Sie möchten, dass sie eindeutige Werte sind, wenn Sie die Daten verketten, setzen Sie sie
ignore_index=True
.Alternativ können Sie Folgendes
df.reindex()
festlegen , um Ihren aktuellen Index mit einem neuen zu überschreiben, anstatt ihn zu verwenden :quelle
ignore_index=False
der Tat ist die Standardeinstellung; Wenn Sie die Option verwenden, umappend
das Verhalten überhaupt zu ändern , muss dies daran liegen, dass Sie es festgelegt habenTrue
.Bei Personen, die immer noch mit diesem Fehler zu kämpfen haben, kann es auch vorkommen, dass Sie versehentlich eine doppelte Spalte mit demselben Namen erstellen. Entfernen Sie doppelte Spalten wie folgt:
quelle
Überspringen Sie einfach den Fehler mit
.values
am Ende.quelle
.values
hat den Trick gemachtIch bin heute auf diesen Fehler gestoßen, als ich eine neue Spalte wie diese hinzufügen wollte
Ich wollte die
REMARK
Spalte von verarbeitendf_temp
, um 1 oder 0 zurückzugeben. Allerdings habe ich eine falsche Variable mit eingegebendf
. Und es gab Fehler wie folgt zurück:Wie Sie sehen können, sollte der richtige Code sein
Weil
df
unddf_temp
eine andere Anzahl von Zeilen haben. Also kehrte es zurückValueError: cannot reindex from a duplicate axis
.Ich hoffe, Sie können es verstehen und meine Antwort kann anderen Menschen helfen, ihren Code zu debuggen.
quelle
In meinem Fall trat dieser Fehler nicht aufgrund doppelter Werte auf, sondern weil ich versucht habe, eine kürzere Serie mit einem Datenrahmen zu verbinden: Beide hatten denselben Index, aber die Serie hatte weniger Zeilen (wobei die obersten fehlten). Folgendes hat für meine Zwecke funktioniert:
quelle
df_larger_dataframe['values'] = df_filtered_dataframe['filtered_values']
und es hat in letzter Zeit bei TimeSeries nicht funktioniert - Ihr Code hat es gelöst!Ich habe ein paar Stunden mit dem gleichen Thema verschwendet. In meinem Fall musste ich_index () eines Datenrahmens zurücksetzen, bevor ich die Apply- Funktion verwenden konnte. Vor dem Zusammenführen oder Nachschlagen von einem anderen indizierten Dataset müssen Sie den Index zurücksetzen, da 1 Dataset nur 1 Index haben kann.
quelle
Einfache Lösung, die bei mir funktioniert hat
Führen Sie
df.reset_index(inplace=True)
vor Gruppierung.Vielen Dank an diesen Github-Kommentar für die Lösung.
quelle