[英]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
然后是可能的鏈bfill
和ffill
:
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)
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.