how to replace infinite value with maximum value of a pandas column?

Filter out inf values first and then get max of Series:

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

Another solution:

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

Set use_inf_as_nan to true and then use fillna. (Use this if you want to consider inf and nan both as missing value) i.e

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

Here is a solution for a whole matrix/data frame:

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