Python Re apply/search TypeError: 'NoneType' object is not subscriptable

Python Re apply/search TypeError: 'NoneType' object is not subscriptable

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

示例标题:CAR EBC 98-99

TypeError: 'NoneType' object is not subscriptable

在 year_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)

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

您遇到的异常是典型的尝试使用括号表示法从包含 None.

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

我会说您在标题字符串中的文本值之一不包含您正在寻找的模式 - regular_expression.search(x) returns None.

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

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'>

哪里什么时候找不到returnsNone

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

和None不可订阅 即你不能做 None[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