データフレーム内の小文字で始まる行を選択

How to get indices list for rows starting with lower case letter? – StackOverflow

最速の方法は回答にある様に,数値に置き換えてnumpyで処理するのが並列化の恩恵を受けられる為,リーズナブルチョイスになる.ただ,意外に回答に出てそうで無いけど,ポイントは頭文字(最初の1文字)の大文字/小文字判別というかなり強い仮定(条件)があるって事(ユニコード文字列云々考えない).そこに着目すれば,まあそのままPandasで処理しても,それなりに効率的でかつシンプルな方法が幾つか考えられて,

import numpy as np
import pandas as pd


df = pd.DataFrame({'col': ['abc', 'Abc', 'dce', 'ADAE']})
display(df[df['col'].astype('a1').between(b'a', b'z')])

df = pd.concat([df]*100000, ignore_index=True)
%timeit a = df['col'].values.astype('a1').view('i1');df[(97<=a) & (a<=122)]
%timeit df[df['col'].astype('a1').between(b'a', b'z')]
%timeit df[df['col'].astype('a1').view('i1').between(97, 122)]
%timeit df.assign(k=lambda df: df['col'].astype('a1').view('i1')).query('97<=k<=122').drop('k', 1)
    col
0   abc
2   dce
100 loops, best of 3: 18.6 ms per loop
10 loops, best of 3: 26 ms per loop
10 loops, best of 3: 20.8 ms per loop
10 loops, best of 3: 32.8 ms per loop
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください