baldr009
baldr009

Reputation: 93

Using python df.replace with dict does not permanently change values

I generated a DataFrame that includes a column called "pred_categories" with numerical values of 0, 1, 2, and 3. See below:

         fileids          pred_categories
0  /Saf/DA192069.txt                3
1  /Med/DA000038.txt                2
2  /Med/DA000040.txt                2
3  /Saf/DA191905.txt                3
4  /Med/DA180730.txt                2

I wrote a dict:

di = {3: "SAF", 2: "MED", 1: "FAC", 0: "ENV"}

And it works at first:

df.replace({'pred_categories': di})
Out[16]: 
          fileids           pred_categories
0   /Saf/DA192069.txt               SAF
1   /Med/DA000038.txt               MED
2   /Med/DA000040.txt               MED
3   /Saf/DA191905.txt               SAF
4   /Med/DA180730.txt               MED
5   /Saf/DA192307.txt               SAF
6   /Env/DA178021.txt               ENV
7   /Fac/DA358334.txt               FAC
8   /Env/DA178049.txt               ENV
9   /Env/DA178020.txt               ENV
10  /Env/DA178031.txt               ENV
11  /Med/DA000050.txt               MED
12  /Med/DA180720.txt               MED
13  /Med/DA000010.txt               MED
14  /Fac/DA358391.txt               FAC

but then when checking

 df.head()

it doesn't seem to permanently "save" it in the DataFrame. Any pointers on what I'm doing wrong?

 print(df)
          fileids             pred_categories
  0   /Saf/DA192069.txt                3
  1   /Med/DA000038.txt                2
  2   /Med/DA000040.txt                2
  3   /Saf/DA191905.txt                3
  4   /Med/DA180730.txt                2
  5   /Saf/DA192307.txt                3
  6   /Env/DA178021.txt                0
  7   /Fac/DA358334.txt                1
  8   /Env/DA178049.txt                0
  9   /Env/DA178020.txt                0
  10  /Env/DA178031.txt                0
  11  /Med/DA000050.txt                2
  12  /Med/DA180720.txt                2
  13  /Med/DA000010.txt                2
  14  /Fac/DA358391.txt                1

Upvotes: 3

Views: 2348

Answers (1)

MaxU - stand with Ukraine
MaxU - stand with Ukraine

Reputation: 210882

Per default .replace() returns changed DF, but it doesn't change it in place, so you have to do it this way:

df = df.replace({'pred_categories': di})

or

df.replace({'pred_categories': di}, inplace=True)

Upvotes: 5

Related Questions