ホームページ  >  記事  >  バックエンド開発  >  Python: Pandas が効率的に動作する方法

Python: Pandas が効率的に動作する方法

巴扎黑
巴扎黑オリジナル
2017-07-19 13:38:561217ブラウズ

この記事では、Pandas の操作効率を比較テストして、どの方法で操作効率を向上できるかを検討します。

テスト環境は次のとおりです:

  • windows 7、64ビット

  • python 3.5

  • pandas 0.19.2

  • numpy 1.11.3

  • ジュピターノートブック

説明が必要です。はい、システム、コンピューター構成、ソフトウェア環境が異なれば、動作結果も異なる可能性があります。同じコンピュータであっても、実行するたびに結果がまったく同じになるわけではありません。

1 テスト内容

テストの内容は、a*a+b*bという簡単な演算過程を3つの方法で計算するというものです。

その 3 つのメソッドは次のとおりです:

  1. Python の for ループ

  2. Pandas の Series

  3. Numpy の ndarray

最初に DataFrame、つまりデータのサイズ、つまり行数を構築します。のDataFrame は、10、100、1000、…、10,000,000 (千万) までです。

次に、jupyter Notebook で次のコードを使用してそれぞれテストし、さまざまなメソッドの実行時間を確認し、比較します。

import pandas as pdimport numpy as np# 100分别用 10,100,...,10,000,000来替换运行list_a = list(range(100))# 200分别用 20,200,...,20,000,000来替换运行list_b = list(range(100,200))
print(len(list_a))
print(len(list_b))

df = pd.DataFrame({'a':list_a, 'b':list_b})
print('数据维度为:{}'.format(df.shape))
print(len(df))
print(df.head())
100
100
数据维度为:(100, 2)
100
   a    b
0  0  100
1  1  101
2  2  102
3  3  103
4  4  104
  • a*a + b*b

  • 方法1:forループ

%%timeit# 当DataFrame的行数大于等于1000000时,请用 %%time 命令for i in range(len(df)):
    df['a'][i]*df['a'][i]+df['b'][i]*df['b'][i]
100 loops, best of 3: 12.8 ms per loop
  • 方法2:シリーズ

rrええええええええ
  • メソッド3: ndarray

type(df['a'])
pandas.core.series.Series
rree
%%timeit
df['a']*df['a']+df['b']*df['b']

2 テスト結果

実行結果は次のとおりです:

実行結果からわかるように、for ループは Series や ndarray よりも明らかに遅く、サイズが大きくなります。データの量が増えるほど、違いはより明らかになります。 データ量が 1,000 万行に達すると、for ループのパフォーマンスは 10,000 倍以上低下します。 Series と ndarray の違いはそれほど大きくありません。

追記: 1,000 万行がある場合、for ループの実行に非常に時間がかかります。テストする場合は、%%time コマンドを使用してください (テストは 1 回のみ)。

次のグラフは、Series と ndarray のパフォーマンスを比較しています。

上の図からわかるように、データが 100,000 行未満の場合、ndarray は Series よりもパフォーマンスが優れています。データ行の数が 100 万行を超える場合、Series のパフォーマンスは ndarray よりわずかに優れています。もちろん、この 2 つの違いは特に明らかではありません。

そのため、通常の状況では、可能であれば、for ループを使用することをお勧めします。数値が特に大きくない場合は、計算に ndarray (つまり、df['col'].values) を使用することをお勧めします。稼働率は比較的低いほうだと言えます。

以上がPython: Pandas が効率的に動作する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。