繁体   English   中英

Pandas 索引错误运行应用函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM