2016-10-16 5 views
2

Nach CSV-Datei zu lesen mit:Wie man Daten von Datenrahmen entfernen dauerhaft

import pandas as pd 
df = pd.read_csv('data.csv') 
print df.shape 

bekomme ich 99 Zeilen Datenrahmen (Indizes) lang:

(99, 2) 

Um Dataframe Bereinigung ich voran gehen und gelten dropna() Methode, die es auf 33 Zeilen reduziert:

df = df.dropna() 
print df.shape 

welche druckt:

Jetzt
(33, 2) 

, wenn ich die Spalten iterieren druckt es aus alle 99 Zeilen, wie sie nicht fallen gelassen wurden:

for index, value in df['column1'].iteritems(): 
    print index 

was das gibt mir:

0 
1 
2 
. 
. 
. 
97 
98 
99 

Es scheint, die dropna() einfach gemacht die Daten "versteckt". Diese ausgeblendeten Daten werden zurückgegeben, wenn ich DataFrame iteriere. Wie kann sichergestellt werden, dass die gelöschten Daten aus Dataframe entfernt werden, anstatt nur versteckt zu werden?

+1

Es ist die Indexzeilenbeschriftungen beibehalten, wenn Sie die in zurücksetzen möchten Dann rufen Sie 'reset_index' auf, Sie werden feststellen, dass Ihr Index einige Zeilenwerte nach' dropna' nicht enthält. – EdChum

+0

Sie rocken! Danke für den Tipp! – alphanumeric

+1

Bitte posten Sie es als Antwort, damit wir es bewerten können. – alphanumeric

Antwort

3

Sie werden verwirrt durch die Tatsache, dass die Zeilenbeschriftungen beibehalten wurden, so dass die letzte Zeilenbezeichnung immer noch 99 ist.

Beispiel:

In [2]: 
df = pd.DataFrame({'a':[0,1,np.NaN, np.NaN, 4]}) 
df 

Out[2]: 
    a 
0 0 
1 1 
2 NaN 
3 NaN 
4 4 

Nach dropna Aufruf der Index Zeilenbeschriftungen sind erhalten:

In [3]: 
df = df.dropna() 
df 

Out[3]: 
    a 
0 0 
1 1 
4 4 

Wenn Sie so zurücksetzen möchten, dass sie aneinander grenzen dann reset_index(drop=True) rufen Sie einen neuen Index zuweisen:

In [4]: 
df = df.reset_index(drop=True) 
df 

Out[4]: 
    a 
0 0 
1 1 
2 4 
Verwandte Themen