2017-02-08 4 views
2

Versuch, eine Spalte aus einem DataFrame in Pandas zu löschen. DataFrame erstellt aus einer Textdatei.

Pandas: Dataframe.Drop - ValueError: Etiketten ['id'] nicht in Achse enthalten

import pandas as pd 
df = pd.read_csv('sample.txt') 
df.drop(['a'], 1, inplace=True) 

Doch dies erzeugt den folgenden Fehler:

ValueError: labels ['a'] not contained in axis  

Hier ist eine Kopie der Datei sample.txt:

a,b,c,d,e 
1,2,3,4,5 
2,3,4,5,6 
3,4,5,6,7 
4,5,6,7,8 

Vielen Dank im Voraus.

+0

Können Sie etwas mehr kontextualisieren? Zum Beispiel durch Hinzufügen von Come-Code. – magicleon

+1

wurde hinzugefügt, danke – saar

Antwort

1

Das Problem ist also, dass Ihre "sample.txt" -Datei nicht die Daten enthält, die Sie entfernen möchten.

Ihre Linie

df.drop(['id'], 1, inplace=True) 

ist attepmting Ihre Datenrahmen nehmen (die die Daten aus Ihrer Beispieldatei enthält), finden Sie die Spalte, wo der Wert ‚id‘ in der ersten Zeile (Achse 1) und zu tun ein inplace replace (modifizieren Sie das existierende Objekt, anstatt ein neues Objekt zu erstellen, das diese Spalte nicht enthält, wird None zurückgegeben und nur das existierende Objekt modifiziert.).

Das Problem ist, dass Ihre Beispieldaten keine Spalte mit einer Kopfzeile gleich "ID" enthalten.

In Ihrer aktuellen Beispieldatei können Sie nur einen Sprung ausführen, wenn der Wert in Achse 1 "a", "b", "c", "d" oder "e" ist. Korrigieren Sie entweder Ihren Code, um einen dieser Werte zu löschen, oder rufen Sie Beispieldateien mit dem richtigen Header ab.

Die Dokumentation für Pandas ist nicht fantastisch, aber hier ist ein gutes Beispiel dafür, wie eine Spalte Rückgang der Pandas zu tun: http://chrisalbon.com/python/pandas_dropping_column_and_rows.html

** Unten in Reaktion hinzugefügt Kommentar Antwort von @saar

hier ist mein Beispielcode: Sample.txt:

a,b,c,d,e 
1,2,3,4,5 
2,3,4,5,6 
3,4,5,6,7 
4,5,6,7,8 

Beispielcode:

import pandas as pd 

df = pd.read_csv('sample.txt') 
print('Current DataFrame:') 
print(df) 
df.drop(['a'], 1, inplace=True) 
print('\nModified DataFrame:') 
print(df) 
Output

:

>>python panda_test.py 
Current DataFrame: 
    a b c d e 
0 1 2 3 4 5 
1 2 3 4 5 6 
2 3 4 5 6 7 
3 4 5 6 7 8 

Modified DataFrame: 
    b c d e 
0 2 3 4 5 
1 3 4 5 6 
2 4 5 6 7 
3 5 6 7 8 
+0

Aber die Codezeile lautet: df.drop (['a'], 1, inplace = True). Kannst du den Code zum Löschen der ersten Spalte notieren? – saar

+0

Ich denke, du machst etwas falsch mit deiner Beispieldatei. Bestätigen Sie, dass die Dateien korrekt formatiert sind und dass die Datei, die Sie zu verwenden glauben, Ihr Arbeitsverzeichnis ist. Wenn das auscheckt, geben Sie Ihren DataFrame aus, um zu bestätigen, dass es so ist, wie Sie es erwarten. –

+0

Danke Rob. Es scheint, dass das Problem Kodierung war. Ich habe die Datei als (utf-8) gespeichert, während sie als ANSI gespeichert werden sollte. – saar

1
bad= pd.read_csv('bad_modified.csv') 
A=bad.sample(n=10) 
B=bad.drop(A.index,axis=0) 

Dies ist ein Beispiel für einen Datenrahmen zum Teil fallen. Falls Sie es brauchen.

Verwandte Themen