在python对象中用数字替换字母

问题描述 投票:3回答:4

我正在尝试在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的新手,我已尽力找到解决方案,但似乎无济于事。谁能帮我吗?

python python-3.x string pandas
4个回答
1
投票

一种愚蠢的解决方案是用一个字母替换一个字母,类似于您的字母,但是必须将数字映射到字符串:

for k,v in mapping.items():
    v = str(v)
    course["Cursus code"] = course["Cursus code"].str.replace(k,v)

输出:

0    1010116
1    1011116
2    1020016
3    1020116
4    1020216

1
投票

字符串在大熊猫中被保留为“对象”。您可以使用数据框的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))

0
投票

您还可以使用map来用dict替换值,这很干净。然后是关于字符串的问题,是因为您没有分配结果吗?

喜欢:course = course.to_string() courseDone = course.str.replace(course["Cursus code"], mapping)

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


0
投票

下面的示例就像您当前的结构。但是有很多方法可以做到这一点。根据需要展开映射。还要注意,遍历字典的方式在Python 2/3中是不同的。注意,键和值都是字典中的字符串。

string_to_change = 'abc123'
mapping_dict = dict(zip(['a','b','c'],['1','2','3']))
for k, v in mapping_dict.iteritems():
    string_to_change = string_to_change.replace(k,v)
'''
© www.soinside.com 2019 - 2024. All rights reserved.