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

问题描述 投票:-1回答:3

我想使用从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
python regex pandas
3个回答
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

0
投票

你可以这样做:

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

0
投票

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

Code:

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

Test Code:

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]))

Results:

                  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
© www.soinside.com 2019 - 2024. All rights reserved.