PandasのDataFrameの行を反復処理する方法は?
[Python] PandasのDataFrameの行を反復処理する方法は? rows | CODE Q&A [日本語]
こちらのサイトを参考にした.
1.行をSeriesとして取り出す方法
DataFrame.iterrows()を使う
例
for row in df.iterrows():
print("c1 :",row["c1"],"c2 :",row["c2"])
2.行をタプルとして取り出す方法(iterrowsより高速)
DataFrame.itertuples()を使う
例
for row in df.itertuples():
print("c1 :",row.c1,"c2 :",row.c2)
3.apply()メソッドに反復処理してもらう方法(一般にfor文使う場合よりも高速らしい)
DataFrame.apply()を使う
例1
def valuation_formula(x, y):
return x * y * 0.5
df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)
例2
def valuation_formula(x):
return x ** 0.5
df = df.apply(valuation_formula, axis=1) #行全体に関数を適用
4.インデックスを指定する方法
例
for ind in df.index:
print(df['c1'][ind], df['c2'][ind])
DataFrameに関数を適応したいとき
こちらを参照した.
基本的に各列,各行に関数を適応したいときは
DataFrame.apply
というようにDataFrameのメソッドのひとつであるapplyメソッドを使えば良い
・各列に対して関数を適応したいとき
DataFrame.apply(関数)
・各行に対して関数を適応したいとき
dataframe.apply(関数, axis=1)
map関数を使うのは賢明ではありません.
map(method, DataFrame)
で得られるものはデータフレームではなく,mapオブジェクトです.
a = map(sample_method, sample_df)
print(type(a))
# 結果 map
python処理を早くするために
1.単純なfor文の代わりにmapまたはリスト内包表記で代用しよう
2.SQLクエリを何度も実行するのはやめよう
3.オブジェクトへの参照回数はなるべく減らそう
4.データフレームの読み書きにはcsvではなくpickleを使おう
まず1について.
これによると関数を呼び出す際はひとまずmapをつかっとくのが無難っぽい.
次に4について
yutori-datascience.hatenablog.com
これによるとこれはcsvの読み込みの早さはdask ≒ pickle >>read_csv
daskは使っと事ないからわからんので私のような雑魚はpickleをつかおう.
ただし,pickleだとメモリに全部一気に展開がされてしまうので,大きなデータサイズのcsvを読む場合だと他の処理如何でメモリリークが起こりそう.一行ずつ処理したり,並列で処理できるようにするのが理想だよね..
■
dataframeをseiriesとして一行ずつ取り出す
■
2つのデータフレーム(シリーズ)間で共通する要素だけを取り出す
arXiv ACL2018に参加した
最初の論文
Probabilistic FastText for Multi-Sense Word Embeddings
Sentence-State LSTM for Text Representation
センテンスのベクトル表現を獲得する手法
Takanori Nakai, Data scientist at D2c | SlideShare
のスライドが参考になる
知識ベースの情報を組み込んだ