Python ';索引器:列表索引超出范围';将lambda函数应用于表中的列时

Python ';索引器:列表索引超出范围';将lambda函数应用于表中的列时,python,pandas,split,index-error,Python,Pandas,Split,Index Error,我有一个pandas数据帧,其中一列包含地址信息,我想对地址进行切片,只提供zipcode,并将其放入一个新列中。例如,典型地址如下所示: 美国马萨诸塞州博尔顿市利兹街609号,邮编01740 为了抓住拉链,我试着: split_zip = lambda x: str(x).split()[-2] df['Zipcode'] = df['Address'].apply(split_zip) 这样做我会得到一个 '索引器:列表索引超出范围' 旁注:当我不指定索引时,它会像我预期的那样将拆分列表放

我有一个pandas数据帧,其中一列包含地址信息,我想对地址进行切片,只提供zipcode,并将其放入一个新列中。例如,典型地址如下所示:

美国马萨诸塞州博尔顿市利兹街609号,邮编01740

为了抓住拉链,我试着:

split_zip = lambda x: str(x).split()[-2]
df['Zipcode'] = df['Address'].apply(split_zip)
这样做我会得到一个

'索引器:列表索引超出范围'

旁注:当我不指定索引时,它会像我预期的那样将拆分列表放在列中(即[609,Lizeth,Streets,Bolton,MA,01740,US])。我可以看到拉链处于[-2]位置,我不知道为什么它抓不住它。此外,尝试获取[1]索引也会引发相同的错误。唯一有效的索引是当我使用[-1]时,它抓住了“我们”


我是python新手,在pandas中使用数据,因此非常感谢您的帮助

以下是您可以尝试的方法:

df['Zipcode'] = df['Address'].str.split(' ').str[-2]

听起来数据帧中的某一行只包含“US”,所以当它被拆分时,没有倒数第二个元素。但是,如果不访问数据,很难说是肯定的。因此,我通过不指定索引来检查是否存在倒数第二个元素,它会在每行中列出您期望的所有元素。绝对应该有一个倒数第二的元素。你是我的救世主!这是可行的,但我不确定这和我原来的有什么不同。有什么想法吗?不确定您的解决方案失败的原因,如果有帮助,请接受并投票:)@JacobGarwin您的解决方案失败,因为它使用了
lambda
str(x).split()
是一个
列表
,由于您尝试使用-2进行索引,因此在不存在-2的情况下,没有额外的错误处理。另一方面,
Series.str
有额外的错误处理,当您尝试访问
Series.str[N]
时,它返回
NaN
,而不是
N
超出范围时的索引器。您可以在源代码中看到额外的错误处理。这是一个简单的if-else逻辑障碍:可悲的是,我无法提高投票率,因为我的声誉太低了。。。但我肯定会接受的。再次感谢!