Pandasのread_csvメソッドを使用して巨大なcsvファイル(約5000万行)を解析しようとしています。
以下は、私が使用しているコードスニペットです。
df_chunk = pd.read_csv(db_export_file, delimiter='~!#', engine='python', header=None, keep_default_na=False, na_values=[''], chunksize=10 ** 6, iterator=True)
その後、このpd.concat
メソッドを使用して、さらに処理するために使用されるデータフレームのセット全体を取得します。
代わりにすべてが正常に機能しています。そのcsvファイルからの読み取り操作は、データフレームの作成に約6分かかります。
私の質問は、同じモジュールとメソッドを使用してこのプロセスを高速化する他の方法はありますか?
以下は、csvファイルとして表示されるサンプルデータです。
155487~!#-64721487465~!#A1_NUM~!#1.000 155487~!#-45875722734~!#A32_ENG~!#This is a good facility 458448~!#-14588001153~!#T12_Timing~!#23-02-2015 14:50:30 458448~!#-10741214586~!#Q2_56!#
前もって感謝します
私はあなたの最良の選択はcsvを分割することだと思います
split -l LINES_PER_FILE YOUR.CSV OUTPUT_NAMES
次に、マルチプロセッシングを使用してすべてのチャンクを読み取ります。あなたは持ってここに例を:
import os
import pandas as pd
from multiprocessing import Pool
# wrap your csv importer in a function that can be mapped
def read_csv(filename):
'converts a filename to a pandas dataframe'
return pd.read_csv(filename)
def main():
# set up your pool
pool = Pool(processes=8) # or whatever your hardware can support
# get a list of file names
files = os.listdir('.')
file_list = [filename for filename in files if filename.split('.')[1]=='csv']
# have your pool map the file names to dataframes
df_list = pool.map(read_csv, file_list)
# reduce the list of dataframes to a single dataframe
combined_df = pd.concat(df_list, ignore_index=True)
if __name__ == '__main__':
main()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加