ValueError: invalid literal for int() with base 10: '10+'

python 报错ValueError: invalid literal for int() with base 10: '10+' 和TypeError: 'float' object is not subscriptable


### 10.employmentLength转换成数值型
def employmentLength_to_int(s):
    if pd.isnull(s):
        return s
    else:
        return np.int16(s.split(" ")[0])
for data in [data_train, data_test_a]:
    data['employmentLength'].replace(to_replace="10+ years", value="10 years",inplace=True)
    data['employmentLength'].replace('< 1 year', '0 years',inplace=True)
    data['employmentLength'].replace('1 year', '1 years',inplace=True)
    data['employmentLength'].replace('2 years', '2 years',inplace=True)
    data['employmentLength'].replace('3 years', '3 years',inplace=True)
    data['employmentLength'].replace('4 years', '4 years',inplace=True)
    data['employmentLength'].replace('5 years', '5 years',inplace=True)
    data['employmentLength'].replace('6 years', '6 years',inplace=True)
    data['employmentLength'].replace('7 years', '7 years',inplace=True)
    data['employmentLength'].replace('8 years', '8 years',inplace=True)
    data['employmentLength'].replace('9 years', '9 years',inplace=True)
    data['employmentLength'] = data['employmentLength'].apply(employmentLength_to_int)

img

### 11.对earliesCreditLine进行处理
#这里只取年份
for data in [data_train, data_test_a]:
    data['earliesCreditLine'] = data['earliesCreditLine'].apply(lambda x: int(x[-4:]))

img

第一个报错是因为"10+‘字符串类型无法转换为整数
第二个报错是因为要转换的列为浮点数类型数据,不能索引切片。
改10+为10,转换一下列类型,df[列名].astype(str)然后切片取数再转整。