将 python df.replace 与 dict 一起使用不会永久更改值

bal*_*009 3 python dataframe pandas

我生成了一个 DataFrame,其中包含一个名为“pred_categories”的列,其数值为 0、1、2 和 3。见下文:

         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
Run Code Online (Sandbox Code Playgroud)

我写了一个字典:

di = {3: "SAF", 2: "MED", 1: "FAC", 0: "ENV"}
Run Code Online (Sandbox Code Playgroud)

它首先起作用:

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
Run Code Online (Sandbox Code Playgroud)

但是当检查

 df.head()
Run Code Online (Sandbox Code Playgroud)

它似乎没有将它永久“保存”在 DataFrame 中。关于我做错了什么的任何指示?

 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
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 5

默认情况下.replace()返回更改的 DF,但它不会就地更改,因此您必须这样做:

df = df.replace({'pred_categories': di})
Run Code Online (Sandbox Code Playgroud)

或者

df.replace({'pred_categories': di}, inplace=True)
Run Code Online (Sandbox Code Playgroud)