コードを高速化-CSVを選択した列のパンダデータフレームにロードしてマージします

ココココ

「1251」で終わるフォルダに3つのCSVファイルがあります。フォルダを繰り返し処理し、これらのファイルを選択して、パンダのデータフレームにチャンクでロードし、選択した列とマージしたいと思います。

90MBのファイルは簡単ですが、スクリプトは700 MBのファイル(300万行以上)を追加するのに15分かかります。操作全体が完了するまでに20分かかります-これは受け入れられません。

手順を変更して加速する方法はありますか?つまり、CSVをパンダのデータフレームにチャンクでロードし、それらを1つのファイルにマージ/追加/連結します。

これは小さなファイルではうまく機能しますが、大きなcsvファイルではより高速である必要があります。良いアイデアの質問をたくさん見つけましたが、これはうまくいくはずです-なぜそんなに遅いのかわかりません。それを速くする方法はありますか?

import os
import sys
import struct
import fileinput
import csv
import pandas as pd



cwd = 'C:\\Users\\'
print(cwd)
directory = (cwd + '\\FINAL\\')
directory2 = (cwd + '\\FINAL\\CSV')
print(directory)
x=pd.DataFrame()
for file in os.listdir(directory):
    if file.endswith( "1251.csv"):
        fajl = os.path.splitext(file)[0]
        print(fajl)
        for chunk in pd.read_csv(directory + '\\' + fajl + ".csv", sep=",",error_bad_lines=False, encoding='latin-1',low_memory=False, chunksize=100000):

            mylist = []
            mylist.append(chunk)
            big_data = pd.concat(mylist, axis= 0)


            big_data = big_data.fillna(value='')
            selected = big_data[['SYS', 'MANDT', 'AGR_NAME', 'OBJECT', 'AUTH', 'FIELD', 'LOW', 'HIGH', 'DELETED']]

            x=x.append(selected)

            x.to_csv(directory2 + '\\' + fajl + '.csv', sep=',', index=False)
ec2604

コードにいくつか問題があると思います。

  1. なぜあなたはチャンクで読んでいますか?パンダはあなたのcsvの読み取りを処理できませんか?それとも、これはコードを高速化する試みでしたか?
  2. 何らかの理由で、2番目のforループ内でリストを再初期化しています。本質的に、このコードはデータフレームを追加する以外に何もしていません。

        for chunk in pd.read_csv(directory + '\\' + fajl + ".csv", sep=",",error_bad_lines=False, encoding='latin-1',low_memory=False, chunksize=100000):
    
            mylist = []
            mylist.append(chunk)
            big_data = pd.concat(mylist, axis= 0)
    
    
            big_data = big_data.fillna(value='')
            selected = big_data[['SYS', 'MANDT', 'AGR_NAME', 'OBJECT', 'AUTH', 'FIELD', 'LOW', 'HIGH', 'DELETED']]
    
            x=x.append(selected)
    
  3. パンダがあなたのcsvを処理できると仮定すると(各csvの大きさはあなたの投稿からは明らかではありません)、私はこれを次のように行います(複数のDataFrameを含むリストにpd.concatを使用すると、追加よりもはるかに効率的です):

    import csv
    import pandas as pd    
    cwd = 'C:\\Users\\'
    print(cwd)
    directory = (cwd + '\\FINAL\\')
    directory2 = (cwd + '\\FINAL\\CSV')
    print(directory)
    my_list = []
    for file in os.listdir(directory):
        if file.endswith( "1251.csv"):
            fajl = os.path.splitext(file)[0]
            print(fajl)
            curr_df = pd.read_csv(directory + '\\' + fajl + ".csv", sep=",",error_bad_lines=False, encoding='latin-1', usecols=['SYS', 'MANDT', 'AGR_NAME', 'OBJECT', 'AUTH', 'FIELD', 'LOW', 'HIGH', 'DELETED'])
            curr_df = curr_df.fillna(value='')
            my_list.append(curr_df)
    x = pd.concat(my_list)
    x.to_csv(directory2 + '\\' + fajl + '.csv', sep=',', index=False)
    
  4. あなたが本当にチャンクで読む必要があると仮定します:

    import os
    import sys
    import struct
    import fileinput
    import csv
    import pandas as pd
    
    
    
    cwd = 'C:\\Users\\'
    print(cwd)
    directory = (cwd + '\\FINAL\\')
    directory2 = (cwd + '\\FINAL\\CSV')
    print(directory)
    x = []
    for file in os.listdir(directory):
        if file.endswith( "1251.csv"):
            fajl = os.path.splitext(file)[0]
            print(fajl)
    
            for chunk in pd.read_csv(directory + '\\' + fajl + ".csv", sep=",",error_bad_lines=False, encoding='latin-1',low_memory=False, chunksize=100000):
    
                x.append(chunk['SYS', 'MANDT', 'AGR_NAME', 'OBJECT', 'AUTH', 'FIELD', 'LOW', 'HIGH', 'DELETED'])
    big_data = pd.concat(x, axis=0)
    big_data = big_data.fillna(value='')
    big_data.to_csv(directory2 + '\\' + fajl + '.csv', sep=',', index=False)
    

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

VBAコードを高速化する

分類Dev

VBAコードを高速化する

分類Dev

Pythonでコードを高速化

分類Dev

TapplyRコードを高速化

分類Dev

TapplyRコードを高速化

分類Dev

配列を使用してコードを高速化するExcelVBA

分類Dev

Numba を使用して次のコードを高速化する

分類Dev

ダフのデバイスはJavaコードを高速化しますか?

分類Dev

コードを高速化してみてください。

分類Dev

パンダのデータフレーム(日付)を選択してマージします

分類Dev

パンダ-選択した列を元のデータフレームに割り当てます

分類Dev

このループコードを高速化する方法は?

分類Dev

iOS / MacOSのメタルコードを高速化する方法

分類Dev

FFMPEG | ビデオをエンコードして高速化する方法

分類Dev

FFMPEG | ビデオをエンコードして高速化する方法

分類Dev

パンダのデータフレーム検索を高速化する方法を探しています

分類Dev

列に基づいてパンダデータフレームのデータを選択します

分類Dev

forループ内のコードを高速化

分類Dev

Pythonでコードのブロックを高速化

分類Dev

コードを高速化する簡単な方法を探しています

分類Dev

Rcppを使用してRコードを高速化できますか?

分類Dev

このPythonコードを高速化する方法は?

分類Dev

libclangを使用してC ++コードの解析を高速化する方法は?

分類Dev

R:forループと高速化コードを取り除く

分類Dev

パンダの列の値に基づいてデータフレームの列を選択します

分類Dev

SQLコマンドを高速化

分類Dev

numpyコードを高速化する方法

分類Dev

コードを高速化する方法は?

分類Dev

このマクロ/コードを高速化できますか?(Excel VBA複製ファインダー)

Related 関連記事

  1. 1

    VBAコードを高速化する

  2. 2

    VBAコードを高速化する

  3. 3

    Pythonでコードを高速化

  4. 4

    TapplyRコードを高速化

  5. 5

    TapplyRコードを高速化

  6. 6

    配列を使用してコードを高速化するExcelVBA

  7. 7

    Numba を使用して次のコードを高速化する

  8. 8

    ダフのデバイスはJavaコードを高速化しますか?

  9. 9

    コードを高速化してみてください。

  10. 10

    パンダのデータフレーム(日付)を選択してマージします

  11. 11

    パンダ-選択した列を元のデータフレームに割り当てます

  12. 12

    このループコードを高速化する方法は?

  13. 13

    iOS / MacOSのメタルコードを高速化する方法

  14. 14

    FFMPEG | ビデオをエンコードして高速化する方法

  15. 15

    FFMPEG | ビデオをエンコードして高速化する方法

  16. 16

    パンダのデータフレーム検索を高速化する方法を探しています

  17. 17

    列に基づいてパンダデータフレームのデータを選択します

  18. 18

    forループ内のコードを高速化

  19. 19

    Pythonでコードのブロックを高速化

  20. 20

    コードを高速化する簡単な方法を探しています

  21. 21

    Rcppを使用してRコードを高速化できますか?

  22. 22

    このPythonコードを高速化する方法は?

  23. 23

    libclangを使用してC ++コードの解析を高速化する方法は?

  24. 24

    R:forループと高速化コードを取り除く

  25. 25

    パンダの列の値に基づいてデータフレームの列を選択します

  26. 26

    SQLコマンドを高速化

  27. 27

    numpyコードを高速化する方法

  28. 28

    コードを高速化する方法は?

  29. 29

    このマクロ/コードを高速化できますか?(Excel VBA複製ファインダー)

ホットタグ

アーカイブ