熊猫数据框应用lambda索引错误

时间:2018-11-21 01:09:18

标签: python pandas dataframe

我有以下代码

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没有'。'。但我不确定该如何解决。

2 个答案:

答案 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