Python重新应用/搜索类型错误:“非类型”对象不可下标

2024-04-18 11:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释我为什么会出现这个错误以及如何修复它吗?我正在尝试搜索98-99年的标题,我想获得第一部分(98):

示例标题:汽车EBC 98-99

TypeError: 'NoneType' object is not subscriptable

在年_min行是错误发生的地方

import pandas as pd
import re

fileinString = 'a.csv'

df1 = pd.read_csv(fileinString, sep=",")

# split title of df1 into string and year tag min and year tag max
regular_expression = re.compile(r'\d\d-\d\d')

title_string = df1['*Title']


year_min = title_string.apply(lambda x: regular_expression.search(x)[0].split('-')[0])

year_max = df1['*Title'].apply(lambda x: regular_expression.search(x)[0].split('-')[1])

print(year_min)

关闭it运行但不起作用的示例: https://ideone.com/JANVt2


Tags: importre标题示例stringtitle错误min
2条回答

您遇到的异常典型地是试图使用括号表示法从一个不包含任何内容的变量访问数据

x = None
x[0]
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'NoneType' object is not subscriptable

我想说的是,标题字符串中的一个文本值不包含您要查找的模式,正则表达式.search(x)对此不返回任何模式

处理这些情况的一种方法是向正在列上应用的函数添加一些逻辑。大致如下:

def extract_pattern(txt):
   match = regular_expression.search(txt)
   if match is None:
      return 'NOT FOUND'
   return match.groups(0).split('-')[0]
year_min = title_string.apply(extract_pattern)

这是因为df1['*Title']的值与此模式不匹配

当它在字符串中找到模式时,会重新调用某些内容

In [18]: regular_expression = re.compile(r'\d\d-\d\d')

In [19]: regular_expression.search('12-18')

Out[19]: <_sre.SRE_Match object; span=(0, 5), match='12-18'>

Where as when未找到它将返回None

In [20]: regular_expression.search('1218') ==None
Out[20]: True

没有一个是不可下标的 i、 e.你什么都不能做[0]

所以最终你要做的就是

In [21]: None[0]
                                     -
TypeError                                 Traceback (most recent call last)
<ipython-input-21-4b6604f77809> in <module>
  > 1 None[0]

TypeError: 'NoneType' object is not subscriptable

相关问题 更多 >