Я работаю над скриптом, который автоматически генерирует столбец полный путь к файлу, используя df.apply (), как показано ниже.
def generate_filepath(row):
all_files = os.listdir(files_dir)
if row['FileName'] not in all_files:
return None
value = os.path.join(files_dir, row['FileName'])
return value
csv_df['FilePath'] = csv_df.apply(generate_filepath, axis=1)
Мне пришлось объявить files_dir как глобальную переменную, а затем использовать ее в функции. Есть ли еще что-нибудь, что я могу передать в качестве аргумента вместе с df.apply? Пожалуйста, помогите мне хорошими предложениями
попробую это прямо сейчас и дам вам знать
Это также кажется бесполезным занятием os.listdir
для каждого элемента, если он всегда будет одним и тем же каталогом ...
@JonClements Я пробовал, и это сработало, и вы предлагаете передать os.listdir один раз в функцию, верно?
Ах ... coldspeed нашел для вас дубликат ... в этом случае вы, возможно, даже не захотите возиться с применением - получите свое объявление один раз ... а затем используйте np.where(...)
с подходящими критериями для создания нового столбца ...
@JonClements Спасибо, Джон тоже попробует!
@JonClements, честно говоря, вопрос op довольно распространен. В Python есть много способов решить эту проблему. Я не знаю, почему меня отвергли за предложение каррирования, поскольку дубликат предназначался для каррирования.
Почему ты не выполняешь свою функцию?
https://www.python-course.eu/currying_in_python.php
или добавить еще один аргумент?
Обновлено: ответ Джона Клементса лучше, чем мой
Вы пробовали
def generate_filepath(row, files_dir)
, а затем использовалиcsv_df.apply(generate_filepath, axis=1, files_dir='whatever')
? Любые kwarg, не потребляемые самим.apply
, передаются прикладной функции.