Zgaduję, że to łatwa poprawka, ale mam problem, który zajmuje prawie godzinę, aby zapisać ramkę danych pandy do pliku csv za pomocą to_csv() Funkcja. Używam anakonda python 2.7.12 z pandami (0.19.1).Pandy to_csv() spowalniają zapisywanie dużej ramki danych
import os
import glob
import pandas as pd
src_files = glob.glob(os.path.join('/my/path', "*.csv.gz"))
# 1 - Takes 2 min to read 20m records from 30 files
for file_ in sorted(src_files):
stage = pd.DataFrame()
iter_csv = pd.read_csv(file_
, sep=','
, index_col=False
, header=0
, low_memory=False
, iterator=True
, chunksize=100000
, compression='gzip'
, memory_map=True
, encoding='utf-8')
df = pd.concat([chunk for chunk in iter_csv])
stage = stage.append(df, ignore_index=True)
# 2 - Takes 55 min to write 20m records from one dataframe
stage.to_csv('output.csv'
, sep='|'
, header=True
, index=False
, chunksize=100000
, encoding='utf-8')
del stage
Ustaliliśmy, sprzętu i pamięci pracują, ale są one dość szerokie stoły (~ 100) z kolumny przeważnie numerycznych (po przecinku) danych.
Dziękuję
Wąskie gardło sprzętu. Zachowaj kartę na przepustowość dysku, a także sprawdź, czy nie ma pustego miejsca na dysku. – Kartik
Jak już wspomniałem, sprawdziłem miejsce na dysku i mogę skopiować duże pliki na dysk z oczekiwaną szybkością. Powinienem też wspomnieć, że piszę na dysk SSD (Samsung 950) –
Spróbuj bez 'chunksize' kwag ... Może to być wiele rzeczy, takich jak cytowanie, konwersja wartości itp. Spróbuj [profil] (https://docs.python.org/3.5/library/profile.html) i zobacz, gdzie spędza większość swojego czasu. – Kartik