Python 如何使用自定义函数和.apply替换数据框中的多个值

Python 如何使用自定义函数和.apply替换数据框中的多个值,python,pandas,dataframe,dictionary,apply,Python,Pandas,Dataframe,Dictionary,Apply,我有多个列具有相同的多个序号值。我正在尝试创建一个可以用于的函数。应用于整个数据帧 def convert(value): if value == 'Ex': return value.replace('Ex', 5) elif value == 'Gd': return value.replace('Gd', 4) elif value == 'TA': return value.replace('TA', 3)

我有多个列具有相同的多个序号值。我正在尝试创建一个可以用于的函数。应用于整个数据帧

def convert(value):
    if value == 'Ex':
        return value.replace('Ex', 5)
    elif value == 'Gd':
        return value.replace('Gd', 4)
    elif value == 'TA':
        return value.replace('TA', 3)
    elif value == 'Fa':
        return value.replace('Fa', 2)
    elif value == 'Po':
        return value.replace('Po', 1)
    elif value == 'NA':
        return value.replace('NA', 0)
    else:
        pass
当我尝试按以下方式运行函数时,收到ValueError

df.apply(转换,轴=0)


有人知道最有效和/或最符合Python的方法吗?

您可以使用
df.replace()
并传递字典映射,如下所示:

import pandas as pd

mapping = {'Ex': 5, 'Gd': 4, 'TA': 3, 'Fa': 2, 'Po': 1, 'NA': 0}

df = pd.DataFrame({'letters': ['Ex','TA','Ex','Fa','Po','TA','TA','Ex','NA','TA']})

df.replace(mapping)
例如,这将产生:

   letters
0        5
1        3
2        5
3        2
4        1
5        3
6        3
7        5
8        0
9        3

如果有多个,则需要循环所有列。您应该使用键/值对的
dict
   letters
0        5
1        3
2        5
3        2
4        1
5        3
6        3
7        5
8        0
9        3