Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3中的正则表达式问题_Python_Regex_Pandas - Fatal编程技术网

Python 3中的正则表达式问题

Python 3中的正则表达式问题,python,regex,pandas,Python,Regex,Pandas,我有一个相当简单的正则表达式,但由于某些原因,它不能捕获所有实例 我的数据框如下所示(包括所有74行,因为我不知道问题发生在哪里): 如果我通过 In [57]: len(df['Name']) 我明白了 Out [57]: 74 我创建了一个正则表达式,如下所示: p = re.compile('_[A-z][0-9][0-9][0-9]_') 我想创建一个列,其中看起来有点像“\u A122”或“\u A100”等的代码段是值。我想使用regex,因为我以后想将这段代码应用到一个更大的

我有一个相当简单的正则表达式,但由于某些原因,它不能捕获所有实例

我的数据框如下所示(包括所有74行,因为我不知道问题发生在哪里):

如果我通过

In [57]: len(df['Name'])
我明白了

Out [57]: 74
我创建了一个正则表达式,如下所示:

p = re.compile('_[A-z][0-9][0-9][0-9]_')
我想创建一个列,其中看起来有点像“\u A122”或“\u A100”等的代码段是值。我想使用regex,因为我以后想将这段代码应用到一个更大的集合中,其中代码段并不总是出现在同一位置

当我使用以下命令时,结果是我要查找的表单的列表:

In [55]: p.findall(str(df['Name']))
Out[55]: 
['_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A122_',
 '_A100_',
 '_A100_',
 '_A100_',
 '_A122_']
问题是,这份清单“太短”。使用len(p.findall(str(df['Name'])),我得到的结果是60。我看不出它缺了哪14行

我不习惯正则表达式,所以这可能是一个非常明显的错误,但我真的非常感谢任何帮助

(我想我可以做一个for循环并逐个单元格创建新的列,但我真的宁愿避免这样做,因为我以后会将此代码应用于更大的数据集,并且不希望它需要一百万年才能运行)

IIUC您可以使用它来提取与您的正则表达式匹配的子字符串:

In [55]: df.Name.str.extract(r'(_[a-zA-Z]\d{3}_)', expand=False)
Out[55]:
0     _A122_
1     _A122_
2     _A122_
3     _A122_
4     _A122_
5     _A122_
6     _A122_
7     _A122_
8     _A122_
9     _A122_
       ...
64    _A100_
65    _A100_
66    _A100_
67    _A100_
68    _A100_
69    _A100_
70    _A100_
71    _A100_
72    _A100_
73    _A100_
Name: Name, dtype: object
PS您不应使用
str(df['Name'])
,因为df的字符串表示形式将缩短:

In [58]: pd.options.display.max_rows = 4

In [59]: df
Out[59]:
                              Name
0   P0824AK03.VAK03_TK02_QE_A122_M
1   P0824AK03.VAK03_TK02_QE_A122_M
..                             ...
72  P0824AK03.VAK03_TK02_QE_A100_M
73  P0824AK03.VAK03_TK02_QE_A100_M

[74 rows x 1 columns]

In [60]: str(df['Name'])
Out[60]: '0     P0824AK03.VAK03_TK02_QE_A122_M\n1     P0824AK03.VAK03_TK02_QE_A122_M\n                   ...              \n72
    P0824AK03.VAK03_TK02_QE_A100_M\n73    P0824AK03.VAK03_TK02_QE_A100_M\nName: Name, dtype: object'

你在用熊猫吗?如果是,请将标签添加到问题中。是的,对不起,我应该说。我使用的是pandas dataframeBTW,
[A-z]
,您需要使用
[A-Za-z]
。感谢Wiktor,但是在这种情况下,结果不会改变,我的列表中仍然没有74个项目。我尝试这样做时,得到了
类型错误:预期的字符串或类似object的字节。但现在问题已经得到了回答,问题也解决了:)它成功了,谢谢。你认为问题出在我错误地使用str(df['Name'])?@J.Dahlgren,不客气。是的,通常我们希望在处理Pandas数据帧时使用Pandas/NumPy/SciPy矢量化函数。正如我在回答中所显示的,Pandas将缩短
str(df['Name'])
——以避免在屏幕上充斥数据。想象一下,如果你有一个DF和几个。十亿行-输出到屏幕的时间太长,
str(df['Name'])
可能会导致内存错误。。。
In [58]: pd.options.display.max_rows = 4

In [59]: df
Out[59]:
                              Name
0   P0824AK03.VAK03_TK02_QE_A122_M
1   P0824AK03.VAK03_TK02_QE_A122_M
..                             ...
72  P0824AK03.VAK03_TK02_QE_A100_M
73  P0824AK03.VAK03_TK02_QE_A100_M

[74 rows x 1 columns]

In [60]: str(df['Name'])
Out[60]: '0     P0824AK03.VAK03_TK02_QE_A122_M\n1     P0824AK03.VAK03_TK02_QE_A122_M\n                   ...              \n72
    P0824AK03.VAK03_TK02_QE_A100_M\n73    P0824AK03.VAK03_TK02_QE_A100_M\nName: Name, dtype: object'