Загрузка нескольких CSV-файлов папки в один фрейм данных - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть несколько файлов CSV, сохраненных в одной папке с одинаковым расположением столбцов, и я хочу загрузить его в python в качестве информационного кадра в pandas.

Вопрос действительно похож на этот поток .

Я использую следующий код:

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)

Есть ли лучшее решение для него с другим пакетом?

Это занимает много времени.

Спасибо

Ответы [ 4 ]

0 голосов
/ 18 сентября 2018

Я проверил все эти подходы, кроме bash, с функцией времени (только один запуск, а также обратите внимание, что файлы находятся на общем диске).

Вот результаты:

Мой подход: 1220.49

Составление списка + concat: 1135.53

concat + map + join: 1116.31

Я пойду на составление списка + concat, что сэкономит мне несколько минути я чувствую себя вполне знакомым.

Спасибо за ваши идеи.

0 голосов
/ 12 сентября 2018

С помощью ссылка на фактический ответ

Кажется, это лучший лайнер:

import glob, os    
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "*.csv"))))
0 голосов
/ 12 сентября 2018

Возможно, использование bash будет быстрее:

head -n 1 first.csv > merged.csv
tail -q -n +2 *.csv >> merged.csv

Идея в том, что вам не нужно ничего анализировать.

Первая команда копирует заголовок одного из файлов. Вы можете пропустить эту строку, если у вас нет заголовка. Tail пропускает заголовки для всех файлов и добавляет их в CSV.

Добавление в python, вероятно, дороже.

Конечно, убедитесь, что ваш анализ все еще действителен с использованием панд.

Любопытно, что ваш тест.

0 голосов
/ 12 сентября 2018

Я предлагаю использовать списочное понимание с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...