Итак, в настоящее время я имею дело с большим объемом данных (62 файла, ~ 150 МБ каждый, ~ 3,5 миллиона строк каждый), и мне нужно загрузить эти плоские файлы в базу данных MySQL, поэтому я использовал библиотеку pandas для чтенияфайлы .csv и создать один фрейм данных, содержащий все данные.
О данных:
Данные разбиты на несколько файлов, так как каждый файл содержит информацию о конкретномместоположение (координаты) в разные дни.Например: один файл содержит данные для примерно 3,5 миллионов координат (они являются фиксированными и общими для всех файлов) в определенный день, и у меня есть 62 таких файла, то есть данные на 62 разных датах.
Я хочу просмотреть все эти данныев одну таблицу, т. е. я хочу добавить дополнительные столбцы (информация о различных датах, соответствующих списку местоположений) в таблицу, и общие столбцы (местоположения / координаты) должны появляться в этой таблице только один раз.Иллюстрация того, как я хочу, чтобы данные в таблице присутствовали здесь
До сих пор мой код выглядит так:
#relevant imports:
import os
import MySQLdb as sql
import numpy as np
from functools import reduce
from sqlalchemy import create_engine
import glob
import pandas as pd
#Accessing database:
engine = create_engine("mysql://root:PASSWORD@localhost/DBNAME")
con = engine.connect()
#Directory change:
path="C:\\Users\\DELL\\Desktop\\DataAnalysis-Internship 18'\\extracted data\\"
os.chdir(path)
#listing file names:
files=glob.glob("IN.201*.csv")
num_files=len(files)
#DATAFRAMES:
#initialiasing first dataframe:
df=pd.read_csv(path+files[0])
df.rename(columns={"avg":"avg"+str(0)}, inplace=True)
for file in files[1:]:
i=1
df_next=pd.read_csv(path+file)
df_next.rename(columns={"avg":"avg"+str(i)}, inplace=True)
df=df.merge(df_next, on=['lon','lat','country'])
i=i+1
df.to_sql(con=con, name='final_table', if_exists='replace', chunksize=10000)
con.close()
Когда я запускаю этот код, хотя,Мой компьютер начинает выполнять команду, и производительность постепенно снижается, и в итоге компьютер начинает зависать.Возможно, слишком много памяти используется, может быть, потому что я делаю один кадр данных из многих, а затем переношу его в базу данных (я не уверен).
Что мне теперь делать, чтобы загрузить все эти файлы вмой столик так, как я хочу?Есть ли более оптимизированный способ?Я думал о слиянии и создании таблиц из 5 файлов одновременно, а затем об использовании атрибута «if_exists = 'append'» в команде «to_sql» для объединения этих нескольких фреймов данных в одну таблицу вместо создания одного огромного фрейма данных и последующей его передачи, ноЯ не уверен насчет атрибута 'append' относительно того, присоединится ли он к таблицам так, как я хочу.