x.split给出IndexError:列表索引超出范围



我的代码是这样的

df2['min_salary'] = min_hr.apply(lambda x: int(x.split('-')[0]))
df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1]))

其使用的数据是这样的薪水列80 - 100最低工资可以正常工作,但最高工资不断出现错误。我做错了什么吗?

正如Tim指出的那样,您可能有数据不遵循您试图拆分字符串的确切格式。您可以尝试这种方法,它将NaN添加到拆分后不会产生两个值的任何列中:

df2[["min_salary", "max_salary"]] = min_hr.str.split("-").apply(pd.Series)

下面是在此数据框的"A"列上使用该代码(并将两个新列命名为"Ax""Ay")后的示例输出:

A  Ax   Ay
0  10-20  10   20
1  30-40  30   40
2     70  70  NaN

注意,如果您希望将单个工资值填充到"max_salary"列,则需要使用稍微不同的方法:

df2[["min_salary", "max_salary"]] = min_hr.split("-").apply(lambda x: [np.nan]*(len(x) < 2) + x).to_list()

70放到Ay列:

A   Ax  Ay
0  10-20   10  20
1  30-40   30  40
2     70  NaN  70

另一种方法(在这种特殊情况下可能是理想的)是横向填充NaN:

df2[["min_salary", "max_salary"]] = min_hr.str.split("-").apply(pd.Series).ffill(axis=1)
A  Ax  Ay
0  10-20  10  20
1  30-40  30  40
2     70  70  70

请注意,这些解决方案都不能将数据转换为数字类型。

试试这样。这应该可以处理'x'中没有-

df2['max_salary'] = min_hr.apply(lambda x: int(x.split('-')[1] if len(x.split('-'))>1 else x.split('-')[0]))
def min_max_value(sal_string):
fields = x.split('-')
if len(fields)>1:
if fields[0].strip().isdigit():
min_field = int(fields[0].strip())
else:
min_field = None
if fields[1].strip().isdigit():
max_field = int(fields[0].strip())
else:
max_field = None
else:
if fields[0].strip().isdigit():
min_field = int(fields[0].strip())
else:
min_field, max_field = None, None
return min_field, max_field
df2[['min_salary','max_salary']] = min_hr.apply(min_max_value, result_type="expand")

你可以试试这样做。

相关内容

  • 没有找到相关文章

最新更新