2017-07-28 513 views
-3

A 40000行1列數據保存爲excel。它有一百個空值。如行361 ... 當我執行df.fillna(method='bfill')時,NaN值仍然是NaN。 如果切片的df片段包含Null值,則會進行特殊處理。 我試過了,但仍然無法填充NaN細胞。 那麼它有什麼問題? 的DF文件是在這裏:pandas df在fillna()之後仍然是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 

當切片DF適用fillna(),NaN的值可以代替:

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

多的問題,你分配輸出? 'df = df.fillna(method ='bfill'')或'df.fillna(method ='bfill',inplace = True)'? – jezrael

+1

[Pandas .fillna()不能在Python 3的DataFrame中填充值的可能的重複](https://stackoverflow.com/questions/34026705/pandas-fillna-not-filling-values-in-dataframe-in-python- 3) –

回答

2

你需要指定輸出:

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

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

或使用inplace=True參數:

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

或更短:

df = df.bfill() 

df.bfill(inplace=True) 
+0

好的!是'df = df.fillna(method ='bfill')'不等於'df.fillna(method ='bfill')'?有點困惑。爲什麼當我測試時,小df可以正確應用'df.fillna(method ='bfill')'? – Cobin

+0

是的,它是平等的,但是這個功能在默認情況下不適用'inplace'。所以必須分配或添加參數。它就像'df.sum()',然後檢查'df' - 也沒有sum系列。但工作'df = df.sum()'''df' – jezrael

+0

但是使用'df.fillna(method ='bfill')'測試一個小數據,它可以運行。那麼區別是什麼呢? – Cobin

相關問題