2017-07-28 1 views
-3

A 40000 Zeilen 1 Spalte Daten als Excel gespeichert. Es sind hundert Nullwerte drin. Wie Zeile 361 ... Wenn ich df.fillna(method='bfill') durchgeführt habe, ist die NaN-Werte immer noch NaN. Wenn ein df-Fragment in Scheiben geschnitten Nullwerte enthält, verarbeitet es expectently. Ich versuchte, aber konnte immer noch nicht NaN-Zellen füllen. Also, was ist los damit? Die df Datei hier:pandas df nach fillna() ist immer noch NaN

excel file click here

df=pd.read_execel('npp.xlsx') 
df.fillna(method='bfill') 
print(df.iloc[360:370,]) 
Out[122]: 
      0 
t360  NaN 
t361  NaN 
t362  NaN 
t363  NaN 
t364 220.50 
t365 228.59 
t366  NaN 
t367  NaN 
t368  NaN 
t369  NaN 

Wenn fillna() auf geschnittenem df gelten, könnten die NaN-Werte ersetzt werden:

print(df.iloc[360:370,].fillna(method='bfill')) 
     0 
t360 220.50 
t361 220.50 
t362 220.50 
t363 220.50 
t364 220.50 
t365 228.59 
t366  NaN 
t367  NaN 
t368  NaN 
t369  NaN 
+3

Mehr Probleme, ordnen Sie Ausgang? 'df = df.fillna (Methode = 'bfill' ') oder' df.fillna (Methode =' bfill ', inplace = True) '? – jezrael

+1

Mögliches Duplikat von [Pandas .fillna() füllt keine Werte in DataFrame in Python 3] (https://stackoverflow.com/questions/34026705/pandas-fillna-not-filling-values-in-dataframe-in-python- 3) –

Antwort

2

Sie ordnen müssen Ausgabe:

df = pd.read_excel('npp.xlsx') 
df = df.fillna(method='bfill') 

df = df[df[0].isnull()] 
print (df) 
Empty DataFrame 
Columns: [0] 
Index: [] 

Oder verwenden Sie inplace=True Parameter:

df = pd.read_excel('npp.xlsx') 
df.fillna(method='bfill', inplace=True) 
df = df[df[0].isnull()] 
print (df) 
Empty DataFrame 
Columns: [0] 
Index: [] 

Oder kürzer:

df = df.bfill() 

df.bfill(inplace=True) 
+0

Alles klar! Ist 'df = df.fillna (method = 'bfill')' ungleich 'df.fillna (method = 'bfill')'? Ein bisschen verwirrt. Warum konnte kleines df 'df.fillna (method =' bfill ') '' rectally' anwenden, wenn ich es testete? – Cobin

+0

Ja, es ist gleich, aber diese Funktion funktioniert standardmäßig nicht 'inplace'. Dies ist notwendig, um Parameter zuzuweisen oder hinzuzufügen. Es ist wie 'df.sum()' und dann check 'df' - es gibt auch keine Summenserie. Aber funktioniert 'df = df.sum()', 'df' – jezrael

+0

Aber testen Sie eine kleine Daten mit' df.fillna (method = 'bfill') ', könnte es laufen. Was ist der Unterschied? – Cobin