同じ列レイアウトの1つのフォルダーに複数のcsvファイルを保存していて、それをパンダのデータフレームとしてpythonにロードしたい。
質問はこれに本当に似ています thread。
次のコードを使用しています。
import glob
import pandas as pd
salesdata = pd.DataFrame()
for f in glob.glob("TransactionData\Promorelevant\*.csv"):
appenddata = pd.read_csv(f, header=None, sep=";")
salesdata = salesdata.append(appenddata,ignore_index=True)
別のパッケージでそれのためのより良い解決策はありますか?
これには時間がかかります。
ありがとう
concat
でリスト内包表記を使用することをお勧めします:
import glob
import pandas as pd
files = glob.glob("TransactionData\Promorelevant*.csv")
dfs = [pd.read_csv(f, header=None, sep=";") for f in files]
salesdata = pd.concat(dfs,ignore_index=True)
多分bashを使う方が速いでしょう:
head -n 1 "TransactionData/Promorelevant/0.csv" > merged.csv
tail -q -n +2 TransactionData/Promorelevant*.csv >> merged.csv
または、jupyterノートブック内から使用する場合
!head -n 1 "TransactionData/Promorelevant/0.csv" > merged.csv
!tail -q -n +2 "TransactionData/Promorelevant*.csv" >> merged.csv
何も解析する必要がないという考えです。
最初のコマンドは、ファイルの1つのヘッダーをコピーします。ヘッダーがない場合は、この行をスキップできます。 Tailはすべてのファイルのヘッダーをスキップし、csvに追加します。
Pythonでの追加はおそらくより高価です。
もちろん、パンダを使用して解析がまだ有効であることを確認してください。
pd.read_csv("merged.csv")
ベンチマークに興味があります。
私は、時間機能付きのbashを除くすべてのこのアプローチをチェックしました(1回の実行のみ、およびファイルが共有ドライブ上にあることにも注意してください)。
結果は次のとおりです。
私のアプローチ:1220.49
リストcomphrension + concat:1135.53
concat + map + join:1116.31
リストcomphrension + concatを使用すると、数分節約でき、かなりなじみがあります。
あなたのアイデアをありがとう。
実際の回答へのリンク の助けを借りて
これは最高のライナーのようです:
import glob, os
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "*.csv"))))