pandasは大規模なデータを読み出す(2 g以上は直接readに適していない)
2 g以上のデータの読み取りは適用され、その上限はまだ探索されていない.読み終わったら、2ステップ目の処理を考えてください.(4 gメモリ1.6 gサイズcsvファイルで問題が発生し、8 gメモリ2.6 gサイズで問題が発生します.その下位メカニズムは不明です......)
1、読み取り
2、変数タイプ
読み取りが完了してプログラムを実行すると、エラーが発生する可能性があります.これは、バッチ読み出し時に同じ変数、前の変数タイプと後の変数タイプが一致しないためです.次のコードを使用してタイプを統一して解決できます.
エラーコードは次のように貼り付けられます.
3、さらに考える
32 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より大きいデータの読み出し処理