如何从Pandas,Python中查找findall结果

时间:2018-02-28 13:46:20

标签: python regex pandas

我想使用从excel电子表格中提取的工作表名称列中的特定模式进行提取,并仅从结果列表中检索最后一个结果。

例如:

"<Worksheet ""2012"">"
"<Worksheet ""2012"">"
"<Worksheet ""2012"">"
"<Worksheet ""2012 - 2013"">"
"<Worksheet ""2012 - 13"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"
"<Worksheet ""2011-2012"">"

我想从工作表专栏中提取2011-2012的12个例子。

我想使用以下代码来提取与模式匹配的最后两位数,但是我收到错误: 只能使用MultiIndex

进行元组索引
df['worksheet'].str.findall('\d{2}')[:,-1]

如何使用工作表列中的模式正确提取并仅检索最后一个实例?

结果如下:

12
12
12
13
13
12
12
12
12
12
12
12
12
12
12

3 个答案:

答案 0 :(得分:2)

使用.str访问者,您可以使用索引或使用get方法访问列表的某些部分。

我认为你在寻找:

df['worksheet'] = df['worksheet'].str.findall('\d{2}').str[-1]

输出:

0     12
1     12
2     12
3     13
4     13
5     12
6     12
7     12
8     12
9     12
10    12
11    12
12    12
13    12
14    12
dtype: object

答案 1 :(得分:0)

你可以这样做:

df['worksheet'] = df['worksheet'].astype(str).str[-4:-2]

答案 2 :(得分:0)

您可以使用地图访问findall结果中的列表,如:

代码:

df['worksheet'].str.findall('\d{2}').map(lambda x: x[-1])

测试代码:

import pandas as pd
import math

df = pd.DataFrame([
    "<Worksheet ""2012"">",
    "<Worksheet ""2012"">",
    "<Worksheet ""2012"">",
    "<Worksheet ""2012 - 2013"">",
    "<Worksheet ""2012 - 13"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
    "<Worksheet ""2011-2012"">",
], columns=['worksheet'])
print(df)

print(df['worksheet'].str.findall('\d{2}').map(lambda x: x[-1]))

结果:

                  worksheet
0          <Worksheet 2012>
1          <Worksheet 2012>
2          <Worksheet 2012>
3   <Worksheet 2012 - 2013>
4     <Worksheet 2012 - 13>
5     <Worksheet 2011-2012>
6     <Worksheet 2011-2012>
7     <Worksheet 2011-2012>
8     <Worksheet 2011-2012>
9     <Worksheet 2011-2012>
10    <Worksheet 2011-2012>
11    <Worksheet 2011-2012>
12    <Worksheet 2011-2012>
13    <Worksheet 2011-2012>
14    <Worksheet 2011-2012>

0     12
1     12
2     12
3     13
4     13
5     12
6     12
7     12
8     12
9     12
10    12
11    12
12    12
13    12
14    12
Name: worksheet, dtype: object