LoginSignup
1
2

More than 5 years have passed since last update.

DataFrame や Series内のデータ参照は「iat」で行おう

Posted at

はじめに

こんにちは。
現在東京大学で主にシステムデザインを学んでいる学生です。
授業で少し大きめのデータを扱った際に普段より長い処理時間に苦労したので、その時に試したちょっとした高速化の工夫をご紹介したいと思います。

用意したDataFrame

名前:Data
長さ:10**6
カラム:ITEM, NUM (適当に作った為、特に意味の無いデータです)

>>> Data.head()
    ITEM  NUM
0   02134   1
1   04137   1
2   03900   1
3   00792   1
4   03678   1
>>> print(len(Data))
1000000

メソッドごとの処理時間の比較

ただデータにアクセスするだけの処理を行い、掛かった時間を比較しています。

1. メソッドを用いない場合(カラム名、インデックスで直接指定)

t = time.time()
for i in range(len(Data)):
    Data['NUM'][i]
print(time.time()-t)
# 54.22648358345032

2. .ilocを用いた場合

t = time.time()
for i in range(len(Data)):
    Data.iloc[i,1]
print(time.time()-t)
# 16.67137122154236

3. .iatを用いた場合

t = time.time()
for i in range(len(Data)):
    Data.iat[i,1]
print(time.time()-t)
# 10.457467794418335

結果

それぞれの処理時間をまとめると以下のようになりました。

メソッド データ数 処理時間(s)
10^6 54.23
iloc 10^6 16.67
iat 10^6 10.46

感想

10^6 程の大きさのデータに対してもこれだけの差が出るとは思っていなかった為、少々驚きました。
大きめのデータを扱う際にはPythonのライブラリのメソッドを積極的に活用していきたいと思います。

1
2
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
1
2