代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

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

  •  1
  • Ahamed Moosa  · 技术社区  · 7 年前

    我有一个数据框,看起来像

    City   Crime_Rate
    
    A      10
    
    B      20 
    
    C      inf
    
    D      15 
    

    我想用crime_rate列的最大值替换inf,这样得到的数据帧应该是

    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 回复  |  直到 7 年前
        1
  •  3
  •   jezrael    7 年前

    滤出 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
    
        2
  •  2
  •   Bharath M Shetty    7 年前

    集合 use_inf_as_nan 为真,然后使用fillna。(如果您想考虑 inf nan 两者均为缺失值),即

    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
    
        3
  •  2
  •   dmeu    6 年前

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

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

        4
  •  0
  •   Ravijeet    7 年前

    一种使用附加函数的方法 替换(np.inf,np.nan) 在max()内。

    它将在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
    

    希望能成功!