Search code examples
pythonpandasdataframedictionaryseries

Replace pandas column values with dictionary values


I have a dictionary like as shown below

OUTPUT = {'supplier': {0: 'ABCD',
  1: 'DEFG',
  2: 'GHIK',
  3: 'JKL'},
 'region': {0: 'KOREA',
  1: 'AUS/NZ',
  2: 'INDIA',
  3: 'ASEAN',
  4: 'HK / CHINA'}}

ID,supplier,region,subject
1, 0, 3, TEST
2, 1, 2, EXAM
3, 3, 4, VIVA

df = pd.read_clipboard(sep=',')

I would like to replace the values in column supplier and region with their corresponding mapping value from the dictionary

I tried the below

df["supplier"].replace(output) # not works
df['supplier'].map(output) # not works

But this threw an error as shown below

AttributeError: 'Series' object has no attribute '_replace_columnwise'

I expect my output to be like as shown below

ID,supplier,region,subject
1, ABCD, ASEAN, TEST
2, DEFG, INDIA, EXAM
3, JKL, HK/CHINA, VIVA

Solution

  • You could use map in loop:

    for k,v in OUTPUT.items():
        df[k] = df[k].map(v)
    

    or simply use replace as suggested by @piRSquared:

    df = df.replace(OUTPUT)
    

    Output:

       ID supplier      region subject
    0   1     ABCD       ASEAN    TEST
    1   2     DEFG       INDIA    EXAM
    2   3      JKL  HK / CHINA    VIVA