使用 series.map() 函数转换系列时出错

Error while transforming series with series.map() function

def locate (code):
    string1 = str(code)
    floor = string1[3]
    if floor == '1':
        return 'Ground Floor'
    else:
        if int(string1[5]) < 1:
            lobby = 'G'
        elif int(string1[5]) < 2:
            lobby = 'F'
        else:
            lobby = 'E'
        return floor + lobby
    
    
print(locate('S191009'))
print(locate('S087525'))

这个函数可以很好地处理单独的输入代码,就像上面的输出

一楼 7E

但是当我用它来映射数据框中的一系列时,它显示错误。

error_data1['location'] = error_data1['status'].map(locate)

错误消息:字符串索引超出范围。

我该如何解决这个问题?

您的问题在于您的系列值:

se = pd.Series(['S191009', 'rt'])
se.map(locate)

产生与您报告的相同的错误。您可以使用 try...except 在函数中忽略这些行,如果它不会伤害您的话。

问题是您正在为一个不存在的字符串编制索引(即该字符串比您预期的要短)。正如另一个答案提到的,如果您尝试使用

my_string="foo"
print(my_string[5])

你会得到同样的错误。要解决这个问题,您应该添加一个 try except 语句,或者为简单起见,添加一个 returns "NotValid" 或类似内容的初始 if 语句。您的数据可能包含不符合您期望的标准格式的字符串。