11

I want to replace the -inf values in a pandas.series feature (column of my dataframe) to np.nan, but I could not make it.

I have tried:

    df[feature] = df[feature].replace(-np.infty, np.nan)
    df[feature] = df[feature].replace(-np.inf, np.nan)
    df[feature] = df[feature].replace('-inf', np.nan)
    df[feature] = df[feature].replace(float('-inf'), np.nan)

But it does not work. Any ideas how to replace these values?

Edit:

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

works

BUT:

df =  df.replace(-np.inf, np.nan)

does not work.

jpp
  • 159,742
  • 34
  • 281
  • 339
Javiss
  • 765
  • 3
  • 10
  • 24

2 Answers2

23

it should work:

df.replace([np.inf, -np.inf], np.nan,inplace=True)
shivsn
  • 7,680
  • 1
  • 26
  • 33
14

The problem may be that you are not assigning back to the original series.

Note that pd.Series.replace is not an in-place operation by default. The below code is a minimal example.

df = pd.DataFrame({'feature': [1, 2, -np.inf, 3, 4]})

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

print(df)

#    feature
# 0      1.0
# 1      2.0
# 2      NaN
# 3      3.0
# 4      4.0
jpp
  • 159,742
  • 34
  • 281
  • 339