2016-12-12 11 views
1

私はこのようなデータフレームを持っています。Pythonでデータフレームからパターンを検索し、対応する値を抽出する方法はありますか?

 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] 

をしかし、私は名前を検索したいです。前もって感謝します。

+0

ありがとうございました最後の質問を受け入れるしかし、あなたは疑問に思えるかもしれませんが、このコード 'df ['Area'] str.extract( 'TFO(。*)'))'といくつかのテキスト 'を追加することができます。 '閉鎖を防ぐため。ありがとう、素敵な一日! – jezrael

+0

Jezraelが私を助けてくれてありがとう。良い一日を。 :) – Dheeraj

答えて

3

あなたが最初lowerにすべての値を変換しcontainsを使用したマスクとboolean indexingを使用することができます:apply

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

別の解決策を、それだけではないにNaN値働く:

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 (.*)')) 
+0

ブール型インデックス作成を試しているとき、ValueErrorとしてValueErrorを与えています:NA/NaN値を含むベクトルでインデックスできません – Dheeraj

+0

パラメータ「na = False'」が必要です。 – jezrael

+0

もう一度ありがとうございます。 – Dheeraj

1

私は正規表現がここにも参考になっされるだろうと思います。あなたはそれで検索するためのルールを指定することができます。 *ワイルドカードは「貪欲」であることを

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

注ので、それを考慮にすべての前と次の兆候がかかります。

は、たとえば次のような何かを行うことができます。私はあなたの弦をどのように保管しているのか正確に分かっていません。もしそれらが分離されているかどうかは分かりませんが、あなたはそれを試してみることができます。 彼らはあなたが公式のPythonのドキュメントで正規表現の詳細情報を見つけることができます

(私はまだ多くを自分でそれらを使用していなかったにもかかわらず)経由で学ぶための重要なPythonのスキルです:https://docs.python.org/2/library/re.html

関連する問題