在python中是否有任何方法可以从数据帧中搜索模式并提取其相应的值?

时间:2016-12-12 06:56:57

标签: python regex pandas dataframe

我有这样的数据帧。

     Area of Power Cons.           Device Name  2016-09-02   2016-09-03  
0   01.11KVA VCB-I South  SJ 11 South Zone Con    32328.19     33157.12   
1   02.11KVA VCB-II Sout  SJ 11 South Zone Con    43879.94     45152.77   
2   03.11 KVA VCB-I Nort  SJ 11 North Zone Con    30132.74     29507.58   
3   04.11 KVA VCB-II Nor  SJ 11 North Zone Con    38632.45 -16448377.89   
4   05.MAIN INCOMER-I So  SJ 11 South Zone Con    31509.76     32313.60   
5   06.MAIN INCOMER-II S  SJ 11 South Zone Con    42617.22     43841.66   
6   07.MAIN INCOMER-I No  SJ 11 North Zone Con    29284.61     28673.92   
7   08.MAIN INCOMER II N  SJ 11 North Zone Con    37391.87     36786.43   
8     22.BLOW ROOM South  SJ 11 South Zone Con     1909.47      1908.40   
9     23.BLOW ROOM North  SJ 11 North Zone Con     1437.14      1369.04   
10      24.CARDING South  SJ 11 South Zone Con     3962.26      3989.94   
11      25.CARDING-North  SJ 11 North Zone Con     3970.63      3706.69   
12   26.PREPRATORY-South  SJ 11 South Zone Con     2456.72      2576.88   
13   27.PREPRATORY-North  SJ 11 North Zone Con     2372.61      2376.38   
14     28.RING FRAME 1-5  SJ 11 South Zone Con     7384.83      7595.06   
15    29.RING FRAME 6-10  SJ 11 South Zone Con     7111.55      7313.15   
16   30.RING FRAME 11-15  SJ 11 South Zone Con     6821.89      7209.26   
17   31.RING FRAME 16-20  SJ 11 South Zone Con     6049.12      6425.47   
18   32.RING FRAME 21-25  SJ 11 North Zone Con     6481.04      6070.30   
19   33.RING FRAME 26-30  SJ 11 North Zone Con     6471.42      6160.90   
20   34.RING FRAME 31-35  SJ 11 North Zone Con     6619.86      6520.43   
21   35.RING FRAME 36-40  SJ 11 North Zone Con     6200.00      6200.00   
22    35.LINC CONER 1-10  SJ 11 South Zone Con     2292.18      2348.64   
23   36.LINC CONER 11-20  SJ 11 South Zone Con     2905.96      2943.62   
24   37.LINC CONER 21-30  SJ 11 North Zone Con     2181.58      2118.38   
25   38.LINC CONER 31-40  SJ 11 North Zone Con     2752.92      2763.26 

我想搜索包含Ring Frame的行并获取其各自的值。

我试过了:

df = data[15:22]

但我想搜索这些名字。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以将boolean indexing与掩码一起使用,首先将所有值转换为lower,然后使用contains

print (df[df['Area of Power Cons.'].str.lower().str.contains('ring frame', na=False)])

使用apply的另一种解决方案,但只有在NaN值不是<{1}}时才有效。

print (df[df['Area of Power Cons.'].apply(lambda x: 'ring frame' in x.lower())])

如果需要提取值,请使用str.extract

print (df['Area of Power Cons.'].str.lower().str.extract('ring frame (.*)'))

如果所有值均为大写:

print (df['Area of Power Cons.'].str.extract('RING FRAME (.*)'))

答案 1 :(得分:1)

我认为正则表达式在这里也会有所帮助。您可以指定使用它进行搜索的规则。

例如,您可以执行以下操作:

import re 
m = re.search('*RING FRAME*')
m.group(0)

请注意*通配符是&#34;贪婪&#34;,因此它会考虑所有先前和后续的标志。我不知道你是如何存放你的琴弦的,如果它们是分开的,你可以试一试。 顺便学习它们是一项重要的蟒蛇技能(尽管我自己还没有很多地使用它们)

您可以在官方python doc中找到有关正则表达式的更多信息:https://docs.python.org/2/library/re.html