Python 熊猫:只填充数字(int或float)列

Python 熊猫:只填充数字(int或float)列,python,pandas,Python,Pandas,我只想在数字列中应用fillna。有可能吗 现在,我在所有列中应用它: df=df.replace(r“^\s*$”,np.nan,regex=True) 您可以选择数字列,然后填充NA 例如: 将熊猫作为pd导入 df=pd.DataFrame({'a':[1,无]*3, “b”:[正确,无]*3, 'c':[1.0,无]*3}) #选择数字列 数字列=df。选择数据类型(包括=['number'])。列 #向所有NaN填充-1 df[numeric\u columns]=df[numeric

我只想在数字列中应用
fillna
。有可能吗

现在,我在所有列中应用它:

df=df.replace(r“^\s*$”,np.nan,regex=True)


您可以选择数字列,然后填充NA 例如:

将熊猫作为pd导入
df=pd.DataFrame({'a':[1,无]*3,
“b”:[正确,无]*3,
'c':[1.0,无]*3})
#选择数字列
数字列=df。选择数据类型(包括=['number'])。列
#向所有NaN填充-1
df[numeric\u columns]=df[numeric\u columns].fillna(-1)
#印刷品
打印(df)

这是一个老问题,但是,我发现单独填写栏比当前选择的答案更快:

def func(df, value):
    df = df.copy()
    for col in df:
        # select only integer or float dtypes
        if df[col].dtype in ("int", "float"):
            df[col] = df[col].fillna(value)
    return df

 func(df, value=-1) # or df.pipe(func, value=-1)

      a      b        c
0    1.0    True     1.0
1   -1.0    None    -1.0
2    1.0    True     1.0
3   -1.0    None    -1.0
4    1.0    True     1.0
5   -1.0    None    -1.0
比较
循环的速度
返回
470µs±12.1µs/循环(7次运行的平均值±标准偏差,每个1000个循环)
,而接受的答案返回
1.57 ms±26.3µs/循环(7次运行的平均值±标准偏差,每个1000个循环)

如果数据帧大小增加到60000行:
pd.concat([df]*10_000,ignore_index=True)
循环
每个循环返回
1.48 ms±79.2µs(平均±标准偏差7次,每个循环1000次)
,而选择的答案返回
2.47 ms±140µs每个循环(平均±标准偏差7次,每个循环100次)


对于这两种情况,循环都比选择的答案快得多。此外,您的里程数可能会有所不同。只是一些值得思考的东西,特别是在努力提高性能的时候。

这很好。我想知道联合收割机是否使用
np。选择
会提高速度