我有以下数据框架:
d_test = {
'c1' : ['31', '421', 'sgdsgd', '523.3'],
'c2' : ['41', np.nan, '412', '412'],
'test': [1,2,3,4],
}
df_test = pd.DataFrame(d_test)
我想把所有值替换为np.nan
,如果它们不是float:
0 31 41 1
1 421 NaN 2
2 NaN 412 3
3 523.3 412 4
这是我所做的:
df_test[['c1', 'c2']] = df_test[['c1', 'c2']].replace(to_replace=r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$', value=np.nan, regex=True)
但结果不是我想要的:
0 NaN NaN 1
1 NaN NaN 2
2 sgdsgd NaN 3
3 NaN NaN 4
IIUC,您可以使用pandas.to_numeric
与errors="coerce"
:
错误{"忽略","提高","强迫"},默认"提高":
如果' raise ',则无效解析将引发异常。
如果'强迫',那么无效解析将被设置为NaN.
如果' ignore ',则无效解析将返回输入。
df_test = df_test.apply(pd.to_numeric, errors="coerce")
#输出:
print(df_test)
c1 c2 test
0 31.0 41.0 1
1 421.0 NaN 2
2 NaN 412.0 3
3 523.3 412.0 4