有人能解释我为什么会出现这个错误以及如何修复它吗?我正试图搜索98-99年的标题,我想得到第一部分(98(:
示例标题:CAR EBC 98-99
TypeError: 'NoneType' object is not subscriptable
在yearmin行是发生错误的地方。
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'dd-dd')
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(返回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'dd-dd')
In [19]: regular_expression.search('12-18')
Out[19]: <_sre.SRE_Match object; span=(0, 5), match='12-18'>
Where as when not find it return None
In [20]: regular_expression.search('1218') ==None
Out[20]: True
和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