我有以下代码
df2['TaxAccNo4'] = df2['TaxAccNo2'].apply(lambda x: x.split('.')[0])
df2['TaxAccNo3'] = df2['TaxAccNo2'].apply(lambda x: x.split('.')[1])
其中df2是:
TaxAccNo2
0 00001379.1
1 00182218
运行代码时,我得到
TaxAccNo2 TaxAccNo4
0 00001379.1 00001379
1 00182218 00182218
和IndexError:列出的索引超出TaxAccNo3的范围
TaxAccNo2 TaxAccNo4 TaxAccNo3
0 00001379.1 00001379 1
1 00182218 00182218
如何修复代码以产生该输出?我假设它给了我错误,因为索引1没有'。'。但我不确定该如何解决。
答案 0 :(得分:0)
正如您所说,问题在于"00182218".split(".")
没有[1]
索引,因为它是列表["00182218"]
。
一个不影响太多代码的简单解决方案是使用... if ... else ...三元运算符:
df2['TaxAccNo4'] = df2['TaxAccNo2'].apply(lambda x: x.split('.')[0])
df2['TaxAccNo3'] = df2['TaxAccNo2'].apply(lambda x: x.split('.')[1] if '.' in x else '')
如果最后一个''
是一个空字符串,则如果“ TaxAccNo2”不带点,则将用该值填充“ TaxAccNo3”(如果需要其他行为,可以将其替换)。
语义是:如果x.split('.')[1]
包含点,则将df2['TaxAccNo3']
放在x
中,否则放置一个空字符串。
答案 1 :(得分:0)
嘿,我正在查看您的代码,问题是,当您在字符串中使用split()方法时,返回的对象是一个列表,这会导致索引错误,如您所指出的那样。如果遇到非常简单的解决方案,请在您的代码中使用条件语句,以防止它为较短的列表调用此索引,如下所示。希望对您有所帮助。
0 0