fillna 确实填充了 NaN 单元格中的数据框
fillna does fill the dataframe in the NaN cells
我错过了什么? fillna 不填充 NaN 值:
#filling multi columns df with values..
df.fillna(method='ffill', inplace=True)
df.fillna(method='bfill', inplace=True)
#just for kicks
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
#retun true
print df.isnull().values.any()
我验证了它 - 我实际上在一些第一个单元格中看到了 NaN 值..
编辑
所以我试着自己写:
def bfill(df):
for column in df:
for cell in df[column]:
if cell is not None:
tmpValue = cell
break
for cell in df[column]:
if cell is not None:
break
cell = tmpValue
然而它不起作用...单元格不是由 ref 吗?
如果前一行的值不是 NaN,ffill 会用它们填充行,如果它们不是 NaN,bfill 会用下一行的值填充行。在这两种情况下,如果您在第一个 and/or 最后一行有 NaN,它们将不会被填充。尝试一个接一个地做。如果任何列具有 完全 NaN 值,那么您将需要再次填充 axis=1,(尽管当我尝试在 python 3.6,超级讨厌,pandas!).
所以,我不知道为什么,但是将 fillna 放在函数之外修复了它..
来源:
def doWork(df):
...
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
def main():
..
doWork(df)
print df.head(5) #shows NaN
解决方案:
def doWork(df):
...
def main():
..
doWork(df)
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
print df.head(5) #no NaN
我错过了什么? fillna 不填充 NaN 值:
#filling multi columns df with values..
df.fillna(method='ffill', inplace=True)
df.fillna(method='bfill', inplace=True)
#just for kicks
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
#retun true
print df.isnull().values.any()
我验证了它 - 我实际上在一些第一个单元格中看到了 NaN 值..
编辑 所以我试着自己写:
def bfill(df):
for column in df:
for cell in df[column]:
if cell is not None:
tmpValue = cell
break
for cell in df[column]:
if cell is not None:
break
cell = tmpValue
然而它不起作用...单元格不是由 ref 吗?
如果前一行的值不是 NaN,ffill 会用它们填充行,如果它们不是 NaN,bfill 会用下一行的值填充行。在这两种情况下,如果您在第一个 and/or 最后一行有 NaN,它们将不会被填充。尝试一个接一个地做。如果任何列具有 完全 NaN 值,那么您将需要再次填充 axis=1,(尽管当我尝试在 python 3.6,超级讨厌,pandas!).
所以,我不知道为什么,但是将 fillna 放在函数之外修复了它..
来源:
def doWork(df):
...
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
def main():
..
doWork(df)
print df.head(5) #shows NaN
解决方案:
def doWork(df):
...
def main():
..
doWork(df)
df = df.fillna(method='ffill')
df = df.fillna(method='bfill')
print df.head(5) #no NaN