1

有人可以解释为什么我会收到此错误以及如何解决它吗?我正在尝试搜索 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

4

2 回答 2

3

您遇到的异常是尝试使用括号表示法从包含 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) 返回无。

处理这些情况的一种方法是向您在列上应用的函数添加一些逻辑。类似于以下内容:

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)
于 2020-04-16T10:09:02.173 回答
1

这是因为您的 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'>

什么时候找不到它返回无

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
于 2020-04-16T10:37:13.537 回答