簡體   English   中英

Pandas bfill 和 ffill 如何用於數字和非數字列

[英]Pandas bfill and ffill how to use for numeric and non-numeric columns

我的一些 NAN 是字符串,而我的一些 NAN 是數字缺失值,如何在這兩種情況下使用 bfill 和 ffill?

df

Criteria      Col1   Col2   Col3     Col4
Jan10Sales     12      13     NAN     NAN
Feb10Sales     1        3      4      ABC
Mar10Sales      NAN      13     14    XY
Apr10Sales      5      NAN     12      V 
May10Sales      6      18     19      AB

如果NaN缺少值,您可以傳遞列名稱,如list

cols = ['Col1','Col2','Col3']
df[cols]=df[cols].bfill()

如果NaN是字符串,首先用非數字的缺失值將字符串替換為數字:

cols = ['Col1','Col2','Col3']
df[cols]=df[cols].apply(lambda x: pd.to_numeric(x, errors='coerce')).bfill()

如果想使用您的解決方案:

for col in ['Col1','Col2','Col3']:
    df[col]= pd.to_numeric(df[col], errors='coerce').bfill()

print (df)
     Criteria  Col1  Col2  Col3
0  Jan10Sales  12.0  13.0   4.0
1  Feb10Sales   1.0   3.0   4.0
2  Mar10Sales   5.0  13.0  14.0
3  Apr10Sales   5.0  18.0  12.0
4  May10Sales   6.0  18.0  19.0

但是如果最后一行有缺失值,回填不會repalce它們,因為不存在下一個非缺失值:

print (df)
     Criteria Col1 Col2 Col3
0  Jan10Sales   12   13  NAN
1  Feb10Sales    1    3    4
2  Mar10Sales  NAN   13   14
3  Apr10Sales    5  NAN   12
4  May10Sales    6   18  NaN

cols = ['Col1','Col2','Col3']
df[cols]=df[cols].apply(lambda x: pd.to_numeric(x, errors='coerce')).bfill()
print (df)

     Criteria  Col1  Col2  Col3
0  Jan10Sales  12.0  13.0   4.0
1  Feb10Sales   1.0   3.0   4.0
2  Mar10Sales   5.0  13.0  14.0
3  Apr10Sales   5.0  18.0  12.0
4  May10Sales   6.0  18.0   NaN

然后是可能的鏈bfillffill

df[cols]=df[cols].apply(lambda x: pd.to_numeric(x, errors='coerce')).bfill().ffill()
print (df)
     Criteria  Col1  Col2  Col3
0  Jan10Sales  12.0  13.0   4.0
1  Feb10Sales   1.0   3.0   4.0
2  Mar10Sales   5.0  13.0  14.0
3  Apr10Sales   5.0  18.0  12.0
4  May10Sales   6.0  18.0  12.0

你可以試試這個:

for cols in ['Col1','Col2','Col3']:
    df[cols].fillna(method='bfill', inplace=True)

pandas.DataFrame.fillna

I guess string 'NAN' does not mean Non-Value Nan, you already got the solution, you can check my code too
df = df[df.ne('NAN')].bfill()

     Criteria Col1 Col2 Col3
0  Jan10Sales   12   13    4
1  Feb10Sales    1    3    4
2  Mar10Sales    5   13   14
3  Apr10Sales    5   18   12
4  May10Sales    6   18   19

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM