如何用pandas列的最大值替换无限值?

时间:2018-06-09 10:07:15

标签: python pandas replace infinite

我的数据框看起来像

City   Crime_Rate

A      10

B      20 

C      inf

D      15 

我想将inf替换为Crime_Rate列的最大值,以便我的结果数据框看起来像

City   Crime_Rate

A      10

B      20 

C      20

D      15

我试过

df['Crime_Rate'].replace([np.inf],max(df['Crime_Rate']),inplace=True)

但是python将inf作为最大值,我在哪里错了?

4 个答案:

答案 0 :(得分:3)

首先筛选出inf值,然后获取max Series

m = df.loc[df['Crime_Rate'] != np.inf, 'Crime_Rate'].max()
df['Crime_Rate'].replace(np.inf,m,inplace=True)

另一种解决方案:

mask = df['Crime_Rate'] != np.inf
df.loc[~mask, 'Crime_Rate'] = df.loc[mask, 'Crime_Rate'].max()

print (df)
  City  Crime_Rate
0    A        10.0
1    B        20.0
2    C        20.0
3    D        15.0

答案 1 :(得分:2)

use_inf_as_nan设置为true,然后使用fillna。 (如果您想将infnan都视为缺失值,请使用此选项,即

pd.options.mode.use_inf_as_na = True

df['Crime_Rate'].fillna(df['Crime_Rate'].max(),inplace=True)

   City  Crime_Rate
0    A        10.0
1    B        20.0
2    C        20.0
3    D        15.0

答案 2 :(得分:2)

这是整个矩阵/数据帧的解决方案:

highest_non_inf = df.max().loc[lambda v: v<np.Inf].max() df.replace(np.Inf, highest_non_inf)

答案 3 :(得分:0)

使用max()中的附加功能替换(np.inf,np.nan)的一种方法。

在max()中发生的操作将inf替换为nan,并且max返回预期的最大值而不是inf

以下示例:最大值为100并替换inf

#Create dummy data frame
import pandas as pd 
import numpy as np  
a = float('Inf')
v = [1,2,5,a,10,5,a,5,100,2]  
df = pd.DataFrame({'Col_A': v})
#Data frame looks like this
In [33]: df
Out[33]: 
        Col_A
0    1.000000
1    2.000000
2    5.000000
3         inf
4   10.000000
5    5.000000
6         inf
7    5.000000
8  100.000000
9    2.000000

# Replace inf  
df['Col_A'].replace([np.inf],max(df['Col_A'].replace(np.inf, 
np.nan)),inplace=True)

In[35]: df
Out[35]: 
   Col_A
0    1.0
1    2.0
2    5.0
3  100.0
4   10.0
5    5.0
6  100.0
7    5.0
8  100.0
9    2.0

希望有效!