LoginSignup
4
1

More than 5 years have passed since last update.

DataFrameでのデータ操作についての備忘録

Last updated at Posted at 2019-01-28

こんにちは。統計検定2級を勉強中のエンジニアです。

今回は、
pythonでデータ操作を扱うのに便利なフレームワークpandasの、
DataFrameのメソッドについての備忘録です。

まず事前に
import pandas as pd
として、
pandasをインポートしておきます。

CSVの読込
#DataFrameへCSVを読込
df = pd.read_csv('hogehoge.csv')
出力
#テキストベースで出力
print(df)

#罫線付きで出力
display(df)
行の抽出など
#範囲指定
df1 = df.query('10 <= columnName < 20')

#SQLのinの様に使えます
df2 = df.query('columnName in ["NY", "TX"]')

#特定の文字列を含む
df3 = df.query('columnName.str.contains("hoge")', engine='python')

#正規表現による抽出
df4 = df.query('columnName.str.match(".*i.*e")', engine='python')

#None, NaNの除外
df5 = df.dropna()

#None, NaNの置換(0で置換)
df6 = df.fillna(0)

#変数の埋め込み
val = 100
df7 = df.query('columnName > @val')

#AND条件
df8 = df.query('columnName1 < 25 and columnName2 > 65')

#元のオブジェクト自体も変更(参照渡し)
df9 = df.query('age_year > 25', inplace=True)

また、query()メソッドで式を評価するエンジンとして、
pythonとnumexprの2種類が使えるそうです。
(デフォルトではpython)

今回はnumexprは使用していませんが
膨大なデータを扱う場合にはnumexprの方が処理が早くなるそうです。

numexprを使用する場合、
別途pipなどでインストールをして
queryの引数でengine='numexpr'と指定してやります。

また、文字列メソッドではengine='python'しか使えないそうです。

詳細については、参考のリンク先をご覧ください。

列、行への加工
#列を加工
df['value'].apply(lambda x: x ** 2)

#列を追加
df.assign(square=(df['value'] ** 2).astype(float))

#行へ加工
df.apply(lambda x: x-x.min(), axis=1)

#全要素へ加工
df.apply_map(lambda x: x ** 2)

#Seriesの全要素へ加工
srs.map(lambda x: x ** 2)

#プログレスパー表示版
#tqdmはアラビア語でprogress
#特にdfのaxis=1は重く、表示してあげると使用感が良くなります
from tqdm import tqdm
tqdm.pandas()

df['square'] = df['value'].progress_apply(lambda x: x ** 2, axis=1).astype(float)

C#のLINQ使いとしてはラムダ式使える書き方は嬉しい。
forでグルグルやるより、直感的で可読性高いですね。
プログレスパーが表示できるってのも面白いですね

ループ処理についてはこちらをご覧ください
pythonのループ処理についての備忘録

参考

note.nkmk.me -pandas.DataFrameの行を条件で抽出するquery-
note.nkmk.me -pandasで欠損値NaNを除外(削除)・置換(穴埋め)・抽出-
apply関数を使って列ごとや行ごとに関数を適用する

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1