[英]Pandas index error running apply function
我创建了以下函数:
def stripnum(str):
array = re.findall(r'\d+', str)
return array[0]
在单行上测试这个函数工作得很好。
stripnum(dataset.loc[4,'Description'])
>> 11
现在我想将此函数应用于现有列并创建一个新列:
dataset['Reason'] = dataset['Description'].apply(stripnum)
但不幸的是,我得到了一个错误list index out of range
。 运行dataset.info()
我检索到 rangeIndex 为 1366、0 到 1365 的信息。列Description
有 1366 个元素。 所以我很困惑,为什么我会收到这个错误。
我试图创建一个新的索引列:
dataset['Index'] = range(1,len(dataset)+1)
但问题仍然存在。
有没有聪明的方法来解决这个问题?
除非您确信传递给函数的列的每一行值都是非空的并且具有 digit value ,否则您的函数可能有问题。 如果字符串中没有数字会发生什么,数组的值是什么? 假设您尝试在字符串值ABC
使用上述findall
:
array = re.findall(r'\d+', "ABC")
array
输出将为[]
。
如果您尝试访问空数组,则会出错。 您可以尝试以下操作:
def stripnum(string_val):
array = re.findall(r'\d+', string_val)
if array: # <-- Checking if array is not empty
return array[0]
else: # <-- array is empty then return None
return None
注意:我将str
更改为string_val
因为str
是内置类型名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.