2016-04-25 13 views
1

私は、部分文字列でPython DataFrameをフィルタリングしようとしています。 SQLでこれを行うのは非常に簡単で簡単ですが、私はこのロジックをPythonコードに変換するのが非常に難しかったです。このSQL文をPython:MIDに変換するには?サブリング?

これは、SQLコードです:

SELECT * FROM [oe.data.0.Current] 
WHERE substring([series_id],5,2) = '50' 
OR substring([series_id],5,5) = '72400'; 

だから基本的に私は、9番目の文字位置によって5番目と6番目の文字位置及び第五に、特定の文字の値によって「series_id」列をフィルタリングします。

MIDまたはSUBSTRINGがどのようにDataFramesに変換されるのか分かりません。

このSQLクエリの結果をDataFrameでどのように達成できますか?

答えて

1

あなたはそれをマッピングし、ラムダ関数を使用することができます。

df[df['series_id'].map(lambda x: x[4:6]=='50' or x[4:9]=='72400')] 

は、よりよい解決策があるかもしれませんが、これは、私は似たようなケースで使用するものです。

編集

は私が何もない場合は、私にはきれいに見える別の解決策があるがわかりました。パンダには、実際には一連の文字列を扱うための組み込み関数がいくつかあります: http://pandas.pydata.org/pandas-docs/stable/text.html

あなたのケースでは、正規表現と組み合わされた関数、またはスライス関数がうまくいくと思います。例:

df[(
    (df['series_id'].str.slice(4,5)=='50') | 
    (df['series_id'].str.slice(4,9)=='72400') 
)] 

かと含まれています

df[df['series_id'].str.contains(r'.{4}((50)|(72400))')] 
+1

良いアイデアを! map(lambda x:x [4:6] == '50'またはx [4:9] == '72400')] ' – MaxU

+0

のスライスインデックスを修正する必要があります。ありがとうございました。私はそれを訂正した。 – Tom83B

関連する問題