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