Цикл в этой функции - самая медленная часть кода моего проекта
Функция предназначена для импорта таблицы из mySQL - таблица имеет Image_DateTaken
, Image_Path
, Image_InAlbum
и * 1006.* columns.
Он циклически перебирает строки в кадре данных, получая год из Image_DateTaken
и собирая пути типа 2015-16/Album
или 2016-17
в зависимости от того, больше ли Image_InAlbum
больше 1 (в этом случаеAlbum
часть добавлена).
Затем записывает этот новый путь в столбец моего dataFrame и экспортирует обратно в sql.
import pandas as pd
from pathlib import Path
#album reads and writes dataframes to sql and back
def write_directoryPath_to_Images():
"Imaginary Create database folder with all images in folders of Date, subfolders of album"
#read data
images_df = album.read_sql('images')
results_df = pd.DataFrame(['Image_DirectoryPath'])
images_df.Image_DateTaken = pd.to_datetime(images_df.Image_DateTaken, errors= 'coerce')
#group by date (year)
grouped = images_df.groupby(images_df.Image_DateTaken.dt.year)
images_df.set_index('Image_Path',inplace=True)
#loop through groups and match them to image paths
print("Looping through {} groups".format(len(grouped)))
for date, group in grouped:
year = '{0:g}-{1}'.format(date, '{0:g}'.format(date+1)[-2:])
for path in group.index:
base = Path(year)
relPath = base.joinpath('Album') if images_df.Image_InAlbum[path] > 0 else base
images_df['Image_DirectoryRelPath'][path] = str(relPath)
#clean up
images_df.reset_index(inplace=True)
album.to_sql(images_df,'images')
Я чувствую, что цикл на самом деле непуть панд, но я не уверен, как обойти это.Я хотел бы ускорить всю функцию, если это возможно, я знаю, что
for path in group.index:
base = Path(year)
relPath = base.joinpath('Album') if images_df.Image_InAlbum[path] > 0 else base
images_df['Image_DirectoryRelPath'][path] = str(relPath)
- самая зацикленная часть, поэтому она выиграет больше всего от повышения скорости, но, возможно, весь мой подход - проблема.