Python как отсортировать изображения jpg в папке по id из DataFrame?
Соревнование на Kaggle. В качестве данных дается огромное количество файлов .npy с 3 каналами от разных станций наблюдений. Эти файлы я конвертировал в jpg. Вот код:
from PIL import Image
def sig2rgb(fname, whiten = True, window=0.2, bandpass=False, f_range = (30,400), q_range = (16,32), q_max = 10):
# Load the file
data = np.load(fname)
# Split each chanel and convert to TimeSeries
data = map(lambda x: TimeSeries(x, sample_rate=2048), data)
# Whiten the signal and apply a tukey window
data = map(lambda x: x.whiten(window=("tukey", window)), data)
# (optional) bandpass filter
if bandpass:
data = map(lambda x: x.bandpass(*f_range), data)
# Q-transform
data = map(lambda x: x.q_transform(qrange=q_range, frange=f_range, logf=True, whiten=False), data)
# Convert to RGB image
img = np.stack(list(data), axis = -1)
img = np.clip(img, 0, q_max)/q_max * 255
img = img.astype(np.uint8)
img = Image.fromarray(img).rotate(90, expand=1)
img = img.resize((10, 10))
return img
import glob
def save_img(x, folder_out, **kwargs):
fname = Path('../input/g2net-gravitational-wave-detection/' + folder_out + '/' + '/'.join([x[0], x[1], x[2], x]) + '.npy')
file_out = folder_out + '/'+ fname.with_suffix('.jpg').name
x = sig2rgb(fname, **kwargs)
x.save(file_out)
train_df = pd.read_csv('../input/g2net-gravitational-wave-detection/training_labels.csv')
if fast_sub: train_ids = train_df['id'][0:10]
else: train_ids = train_df['id']
if train:
os.makedirs('train', exist_ok = True)
o = Parallel(n_jobs=4)(delayed(save_img)(x, 'train') for x in tqdm(train_ids))
В итоге получил в папке jpg файлы, но они сохранены в рандомном порядке. Имена jpg соотвествуют Id из train_df. Мне же нужно, чтобы файлы в папке были сохранены (сортированы) в том порядке, как указаны id в train_df. Пример:
id target
0 00000e74ad 1
1 00001f4945 0
2 0000661522 0
3 00007a006a 0
В папке /train файлы должны быть:
00000e74ad
00001f4945
0000661522
00007a006a