使用 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 语句。您的数据可能包含不符合您期望的标准格式的字符串。
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 语句。您的数据可能包含不符合您期望的标准格式的字符串。