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。选择会提高速度