У меня проблемы со сложным ходом.У меня есть данные о местах расположения картинок и местах назначения.У меня есть каталог 'train / test / val'.В настоящее время все файлы находятся в каталоге train и в другой папке в соответствии с их классом (всего 28 классов).
Мне нужно переместить 10% каждого класса из каталога train / class в каталог test / class и val / class, оставив 80% файлов, в которых они находятся.
Я использовал следующий код для перемещения всех файлов в папки их классов из одной сплошной папки:
import shutil
import os
if __name__ == '__main__':
for index, row in labels.iterrows():
try:
shutil.move(row['location'], row['destination'])
except:
pass
Я бегу к стене, выясняя, как переместить определенное числофайлы в соответствии с их классом.
Ниже приведены данные каждого класса, количество файлов в столбце count
и количество файлов, которые нужно переместить в каталог тестирования и каталог проверки в move_count
.
import pandas as pd
dic = {'class': ['other_hazard', 'roof', 'front_of_dwelling',
'address_verification', 'rear_of_dwelling',
'left_front_of_dwelling', 'right_front_of_dwelling',
'detached_structure', 'roof_hazard', 'right_side_of_dwelling',
'left_side_of_dwelling', 'other', 'left_rear_of_dwelling',
'right_rear_of_dwelling', 'restricted_access', 'opportunity_line',
'dog_on_premises', 'pool', 'adjacent_exposure', 'apparent_feature',
'basement', 'hot_tub', 'utl_utc',
'supplemental_heating_source_(wood_stove)', 'brush',
'electrical_panel', 'street_sign_(utl)', 'business_exposure'], 'count': [643612, 631651, 441595, 436153, 365357, 275534, 275023, 220917,
194744, 110098, 109182, 59484, 46058, 45358, 21599, 13753,
5668, 4586, 3292, 3197, 2899, 2873, 2862, 1994,
1677, 1392, 1077, 1063], 'move_count': [64361., 63165., 44160., 43615., 36536., 27553., 27502., 22092.,
19474., 11010., 10918., 5948., 4606., 4536., 2160., 1375.,
567., 459., 329., 320., 290., 287., 286., 199.,
168., 139., 108., 106.]}
df_class = pd.DataFrame(dic)
Ниже приведен пример фрейма данных, в котором указано, где находятся файлы и куда мне нужно переместить процент файлов.
df = {'PictureFilename': ['0091240758-91931712.JPG','0091240791-91646592.JPG', '0091240791-91646593.JPG']
, 'Target': ['Detached Structure','Address Verification', 'Other']
, 'location': ['D:\\CIS inspection images 0318\\Photos\\train\\0091240758-91931712.JPG'
,'D:\\CIS inspection images 0318\\Photos\\train\\0091240791-91646592.JPG'
,'D:\\CIS inspection images 0318\\Photos\\train\\0091240791-91646593.JPG']
,'test_move_location' : ['D:\\CIS inspection images 0318\\Photos\test\detached_structure'
,'D:\\CIS inspection images 0318\\Photos\\test\\address_verification'
,'D:\\CIS inspection images 0318\\Photos\\test\\other']
, 'val_move_location': ['D:\\CIS inspection images 0318\\Photos\\val\\detached_structure'
,'D:\\CIS inspection images 0318\\Photos\\val\\address+verification'
,'D:\\CIS inspection images 0318\\Photos\\val\\other']
}
df_1 = pd.DataFrame.from_dict(df)
У меня проблемы с использованием одного DF для направления другого и выполнения этого движения.Какие-либо предложения?Это то, что я пытался начать с заявления о печати, и оно, похоже, зависло.Я даже не уверен, правильно ли он ведет счет с правильным классом:
for index, row in df_1.iterrows():
for i, r in df_class.iterrows():
if row['target'] == r['class']:
for i in range(1, r['move_count']):
print(i, row['target'], r['class'])
Хорошо, я нашел способ перебрать кадр данных и распечатать местоположение и место назначения файлов, что означаетЯ могу переместить их.Я не смог выяснить, как остановить движение на определенном количестве файлов.
categories = df_class['class'].unique()
for category in categories:
n = 0
for index, row in labels.iterrows():
if category == row['target']:
n += 1
print(n, train_dir+'\\'+row['target']+'\\'+row['PictureFilename'], 'destination: '+ test_dir+'\\'+row['target']+'\\'+row['PictureFilename'])