Python:大規模CSVファイルをDataFrameに変換

4232 ワード

以前は試合中にDataFrameをやっていたので、小さなデータを扱うのが便利でした.しかし、今日は3.32 GのCSVファイルに遭遇しました.無力で、いつもメモリエラーを報告しています.インターネットを利用していくつかの方法を探してすべてとても啓発があると感じて、だから自分で統合しました.記憶力の悪い私が忘れないように記録します.
方法1:
with open('C:/Users/asus/Desktop/Python/test.csv') as f:
    for line in f:
        print line

この方法は書くのが非常に簡便で、コードの量は少ないが、読むのは文字列で、整理や計算が容易ではなく、特に時間がかかり、202 sもある.しかし、実行するとすぐに物が出てきて、一時停止して内容のフォーマットなどを観察することができます.
方法2:
def read_in_block(file_path):
    BLOCK_SIZE = 1024
    with open(file_path,'r') as f:
        while True:
            block = f.read(BLOCK_SIZE)  
            if block:
                yield block
            else:
                return #        ,   

for block in read_in_block('C:/Users/asus/Desktop/Python/test.csv'):
    print block

メソッド2では、パスをパスしてファイルをいくつかのセグメントに分けて読み取り、メモリバッファに一定の長さを読み込むたびにメモリを解放するメソッドを書きます.108 sの時間がかかり、最初の方法より半分も短い.しかし、私のような入門したばかりのシロに比べて、このような膨大な文字列データに直面するのはまだ扱いにくい.私が欲しいのはそれをDataFrameに変えてから処理することです.
方法3:
import pandas as pd
data = pd.read_csv('C:/Users/asus/Desktop/Python/test.csv',chunksize=1000000,header=None,sep=';')
for chunk in data:
    print chunk


 
  
, 57s! DataFrame 。chunksize pandas csv , read_csv() , None 。 , chunksize ,read_csv() , 。 TextFileReader , , TextFileReader !! 。 for ! 。 , 。 for chunk DataFrame , chunk DataFrame。 :
data = pd.read_csv('C:/Users/asus/Desktop/Python/test.csv',chunksize=1000000,header=None,sep=';')
# print data
df = pd.DataFrame(columns=[0,1,2,3,4,5,6,7,8])    #        DataFrame
for chunk in data:
    # print type(chunk)
    # print chunk
    df = pd.concat([df,chunk],ignore_index=True)    #  chunk         DataFrame
print df
, ! , for :
for chunk in data:
    # print type(chunk)
    # print chunk
    chunk = chunk.dropna(axis=1)    #   
    chunk = chunk.drop_duplicates() #       
    df = pd.concat([df,chunk],ignore_index=True)
print df

, , , 。 chunksize=1000000, 100 , , DataFrame , 。 68s。


reader = pd.read_csv('C:/Users/asus/Desktop/Python/test.csv',iterator=True,sep=';')
loop = True
chunksize = 100000
chunks = []
while loop:
    try:
        chunk = reader.get_chunk(chunksize)
        chunk = chunk.dropna(axis=1)
        chunk = chunk.drop_duplicates()
        chunks.append(chunk)
    except StopIteration:
        loop = False
        print "Iteration is stopped."
df = pd.concat(chunks,ignore_index=True)
df = df.dropna(axis=1)
df = df.drop_duplicates()
print df
, , 。 , DataFrame , 50s。


 
   
   
  
, , 。 。
, 。 Python , , , ,
https://www.jianshu.com/p/f935673ef524
http://www.jb51.net/article/63603.htm