用 Pandas 数据帧中的 NaN 替换所有 inf、-inf 值

问题描述

我有一个大数据框,在不同的列中包含 inf 和 -inf 值。我想用 NaN 替换所有 inf、-inf 值

我可以逐列这样做。所以这是有效的:

df['column name'] = df['column name'].replace(np.inf,np.nan)

但是我的代码在一次遍历数据帧时没有这样做。

df.replace([np.inf,-np.inf],np.nan)

输出不会替换 inf 值

解决方法

您可以使用applymap()

df = df.applymap(lambda x: np.nan if x == np.inf else x)
,

pandas.Series.replace 不会就地发生 (taken from here)。

因此,您的代码替换整个数据帧的问题不起作用,因为您需要将其重新分配或添加 ``` r x<-(c(4,3,5,6,2,1)) df<-as.data.frame(x) func<- function(x){ res <- rep(NA,length(x)) for(i in seq(1,length(x))){ if(i%%2 == 1){ res[i] = x[i]/ifelse(i==length(x),NA,x[i+1])+x[i]} else if(i%%2 == 0){ res[i] = x[i]/ifelse(i==1,x[i-1])+x[i]} } res } func(df$x) #> [1] 5.333333 3.750000 5.833333 7.200000 4.000000 1.500000 library(dplyr) df %>% mutate(x = ifelse(row_number()%%2,x/lead(x)+x,x/lag(x)+x)) #> x #> 1 5.333333 #> 2 3.750000 #> 3 5.833333 #> 4 7.200000 #> 5 4.000000 #> 6 1.500000 作为参数。这也是您的逐列有效的原因,因为您将其分配回 inplace=True

因此,将 df['column name'] = ... 更改为:

df.replace([np.inf,-np.inf],np.nan)

或者分配回一个新的数据帧:

df.replace([np.inf,np.nan,inplace=True)

enter image description here