Как оптимизировать время очистки и слияния для больших файлов с python? - PullRequest
0 голосов
/ 03 июля 2019

Я работаю с 8 различными CSV-файлами. На первом этапе я очистил каждый файл следующим образом:

1) файл наблюдений

obs = pd.read_csv('....csv',sep = ";")
obs = asport_obs.drop(['date', 'humidity', 'precipitation', 'station'],axis=1).dropna()
obs['time'] = obs['time'].astype('datetime64[ns]')
obs['time'] = asport_obs['time'].apply(lambda x: x.strftime('%d-%m-%Y %H'))
asport.columns = ['temperature_obs','time'] 

2) файлы предвидений

prev = pd.read_csv('....csv',sep = ";")
prev = prev.drop(['cloud_cover', 'date', 'humidity', 'latitude_r', 'longitude_r', 'pressure', 'wind', 'wind_dir'],axis=1).dropna()
prev['time'] = prev['time'].astype('datetime64[ns]')
prev['time'] = prev['time'].apply(lambda x: x.strftime('%d-%m-%Y %H'))
prev.columns = ['temperature_prev','time'] 


prev2 = pd.read_csv('....csv',sep = ";")
prev2 = prev2.drop(['cloud_cover', 'date', 'humidity', 'latitude_r', 'longitude_r', 'pressure', 'wind', 'wind_dir'],axis=1).dropna()
prev2['time'] = prev2['time'].astype('datetime64[ns]')
prev2['time'] = prev2['time'].apply(lambda x: x.strftime('%d-%m-%d-%Y %H'))
prev2.columns = ['temperature_prev2','time'] 

...

то же самое для 5 других файлов.

Во второй раз я слил все эти файлы по ключу «время» в этом формате «день-месяц-год-час» слева (файл obs) следующим образом:

prevs = pd.merge(obs,prev[['time', 'temperature_apiagro']], how='left',on='time')

prevs = pd.merge(prevs,prevs2[['time', 'temperature_darksky']], how='left',on='time')

... и так далее

Окончательный размер объединенного файла составляет приблизительно 42 миллиона строк. Процесс получения объединенного файла очень долгий, и теперь каждый раз, когда я пытаюсь его запустить, алгоритм / python ломается.

Я хотел бы знать, есть ли решение для оптимизации моего кода, чтобы ускорить его запуск и работать без перерыва

1 Ответ

0 голосов
/ 03 июля 2019

(1) Вместо загрузки всего файла вы можете перебирать строки в csv и очищать их отдельно.

Это будет в основном соответствовать этому ответу: Чтение огромного CSV-файла

(2) Вместо того, чтобы открывать их все и сохранять в рабочей памяти, переберите список путей (к файлам) и сохраните только текущий.

(3) Наконец, для слияния взгляните на таблицы. Не используйте csv или pd.Dataframe, вместо этого создайте файл .pytable и добавьте очищенные результаты итеративно в файл.

...