パンダのチャンクサイズ
Python の pandas
ライブラリを使用すると、DataFrame を操作できます。 データは、DataFrame 内の行と列に編成されます。
複数のソースから DataFrame にデータを読み込むことができます。
実際の状況では、何千もの行と列を含むデータセットを扱うことができます。 ソースによっては、このデータセットを DataFrame に読み込むことができます。
パンダのチャンクサイズ
大きなデータセットを読み取る際に chunksize
パラメータを使用して、データセットをデータのチャンクに分割することがあります。 chunksize
パラメータでこれらのチャンクのサイズを指定します。
これにより、計算メモリが節約され、コードの効率が向上します。
まず、[read_csv()
関数』で chunksize
パラメータを使用せずに CSV ファイルを読み込んでみましょう。 この例では、映画のレビュー を含むサンプル データセットを読み取ります。
import pandas as pd
df = pd.read_csv("ratings.csv")
print(df.shape)
print(df.info)
出力:
(25000095, 4)
<bound method DataFrame.info of userId movieId rating timestamp
0 1 296 5.0 1147880044
1 1 306 3.5 1147868817
2 1 307 5.0 1147868828
3 1 665 5.0 1147878820
4 1 899 3.5 1147868510
... ... ... ... ...
25000090 162541 50872 4.5 1240953372
25000091 162541 55768 2.5 1240951998
25000092 162541 56176 2.0 1240950697
25000093 162541 58559 4.0 1240953434
25000094 162541 63876 5.0 1240952515
[25000095 rows x 4 columns]>
上記の例では、指定されたデータセットを読み取り、その詳細を表示します。 shape
属性は、行と列、それぞれ 25000095 と 4 を返します。
info
属性を使用して、データセットの行と列に関する情報も表示します。
このデータセットには 2500005 行が含まれており、このような大きなデータセットを処理するにはコンピューターのメモリを大量に消費することがわかります。 そのような場合、chunksize
パラメータを使用できます。
このために、まず Python のイテレータとは何かを理解しましょう。
反復可能なシーケンスは、for
ループを使用してループできます。 for
ループは、iter()
メソッドをそのようなオブジェクトに内部的に適用して、イテレーターを作成します。
next()
関数を使用して、シーケンス内の要素にアクセスできます。
chunksize
パラメータを使用すると、イテレータが取得されます。 このオブジェクトを繰り返し処理して値を取得できます。
import pandas as pd
df = pd.read_csv("ratings.csv", chunksize=10000000)
for i in df:
print(i.shape)
出力:
(10000000, 4)
(10000000, 4)
(5000095, 4)
上記の例では、chunksize
パラメーターに値を指定し、データセットを指定された行のデータのチャンクに読み取ります。 このデータセットでは、chunksize
演算子を 10000000 に指定したときに 3つの反復子がありました。
返されるオブジェクトは DataFrame ではなく、pandas.io.parsers.TextFileReader
オブジェクトです。
オブジェクトを反復処理して、値にアクセスできます。 各反復子の列数は同じであることに注意してください。これは、反復子の作成中に chunksize
パラメーターが行のみを考慮することを意味します。
このパラメーターは、pandas.read_json
、pandas.read_stata
、pandas.read_sql_table
、pandas.read_sas
などの他のソースからデータを読み取ることができる他の関数で使用できます。 このパラメーターを使用する前に、公式ドキュメントをチェックして、その可用性を確認することをお勧めします。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn