pandasは大規模なデータを読み出す(2 g以上は直接readに適していない)


2 g以上のデータの読み取りは適用され、その上限はまだ探索されていない.読み終わったら、2ステップ目の処理を考えてください.(4 gメモリ1.6 gサイズcsvファイルで問題が発生し、8 gメモリ2.6 gサイズで問題が発生します.その下位メカニズムは不明です......)
1、読み取り
import pandas as pd
reader = pd.read_csv('hlj_all_addr.csv', iterator=True)

loop = True
chunkSize = 100000
chunks = []
while loop:
    try:
        chunk = reader.get_chunk(chunkSize)
        chunks.append(chunk)
    except StopIteration:
        loop = False
        print ("Iteration is stopped.")
pd1 = pd.concat(chunks, ignore_index=True)

2、変数タイプ
読み取りが完了してプログラムを実行すると、エラーが発生する可能性があります.これは、バッチ読み出し時に同じ変数、前の変数タイプと後の変数タイプが一致しないためです.次のコードを使用してタイプを統一して解決できます.
pd1["plate_no"]=pd1["plate_no"].apply(str)
#             ,      ,    str.contains  
#        ,          ,        ,       ,  str.contains   

エラーコードは次のように貼り付けられます.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-38-9a108c6ca670> in <module>
      2 
      3 tmp=pd1[pd1['plate_no'].notnull()]
----> 4 tmp=pd1[pd1["plate_no"].str.contains(pat='-',regex=False)]
      5 tmp.to_csv('tmp1.csv',encoding='gbk')

D:\programs\anaconda\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2788 
   2789         # Do we have a (boolean) 1d indexer?
-> 2790         if com.is_bool_indexer(key):
   2791             return self._getitem_bool_array(key)
   2792 

D:\programs\anaconda\lib\site-packages\pandas\core\common.py in is_bool_indexer(key)
    134             if not lib.is_bool_array(key):
    135                 if isna(key).any():
--> 136                     raise ValueError(na_msg)
    137                 return False
    138             return True

ValueError: cannot mask with array containing NA / NaN values


3、さらに考える
32 gより大きいデータの読み出し処理