首页 > 解决方案 > 用python对象中的数字替换字母

问题描述

我正在尝试在 Pandas DataFrame 中用数字替换 python 对象的所有字母。

示例:我有一列包含 3000 个课程代码,例如。A0101P。我试图用相应的数字(A = 1,B = 2 等)替换课程代码中的所有字母,所以输出看起来像这样“1010116”(最重要的是,是一个整数而不是一个对象/字符串)

课程代码最初是一个 python 对象。所以我用过

course.to_string()

将其更改为字符串值。

然后,我创建了一个映射,然后使用 str.replace 替换这些值。

mapping = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5, "F": 6, "G": 7, "H": 8, "I": 9, "J": 10, "K": 11, "L": 12, "M": 13, "N": 14, "O": 15, "P": 16, "Q":17,"R":18, "S": 19, "T": 20,"U": 21, "V": 22, "W": 23, "X": 24, "Y": 25, "Z":26}

courseDone = course.str.replace(course["Cursus code"], mapping)

它引发了一个错误

AttributeError: 'str' object has no attribute 'str'

我也试过

for key, value in mapping.items():
    course = course.replace(key, value)

它会引发错误

TypeError: replace() argument 2 must be str, not int

即使数据类型是字符串。

示例数据:

1       A0101P
2       A0111P
3       A0200P
4       A0201P
5       A0202P

期望的输出:

1       1010116
2       1011116
3       1020016
4       1020116
5       1020216

我还尝试使用 str() 更改数据类型,最终错误是相同的。

当我使用

for key, value in mapping.items():
    course["Cursus code"] = course["Cursus code"].replace(key, value)

我没有收到错误,但输出保持不变。

我是 python 新手,我已尽力寻找解决方案,但似乎没有任何效果。任何人都可以帮助我吗?

标签: pythonpython-3.xstringpandas

解决方案


字符串在熊猫中被保存为“对象”。您可以使用数据框的 info() 方法来查看哪些列是整数、对象(用于字符串)、时间戳等,例如:

df.info()

至于您的问题,您可以使用 apply 方法并将您的字符串替换为所需的映射,如下所示:

def str_to_int_map(string, mapping):

   return int(''.join([str(mapping.get(x, x)) for x in string]))
mapping = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5, "F": 6, "G": 7, "H": 8, "I": 9, "J": 10, "K": 11, "L": 12, "M": 13, "N": 14, "O": 15, "P": 16, "Q":17,"R":18, "S": 19, "T": 20,"U": 21, "V": 22, "W": 23, "X": 24, "Y": 25, "Z":26}
df['Course'] = df['Course'].apply(lambda x: str_to_int_map(x, mapping))

推荐阅读