Я работаю над реальным конвейером по обработке данных, где я обрабатываю от 300 до 500 файлов Excel в день. Каждый файл читается, ворвано в pandas.dataframe, и в конце все, что получаются в результате данных, объединяются в один. (ThreadPoolexeCutor (max_workers = 16)), я сталкиваюсь с основными проблемами: < /p>
Только около 20–50 файлов (из ~ 300). Получите успешно обработанную и согласну. 'Nonetype' < /p>
< /blockquote>
Некоторые потоки создают пустые данные о данных, даже если исходные файлы действительны. Каждый поток обрабатывает свой собственный файл и возвращает новый DataFrame.import pandas as pd
from concurrent.futures import ThreadPoolExecutor, as_completed
def process_file(file_path):
try:
df = pd.read_excel(file_path)
df['date'] = pd.to_datetime(df['date'], errors='coerce')
df['foo'] = df['foo'].astype(str).str.upper()
if df.empty:
print(f"[WARN] Empty DataFrame from: {file_path}")
return df
except Exception as e:
print(f"[ERROR] Failed to process {file_path}: {e}")
return None
def process_files_in_parallel(file_list, max_workers=16):
results = []
failed_files = []
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(process_file, file): file for file in file_list}
for future in as_completed(futures):
file = futures[future]
try:
df = future.result()
if df is not None and not df.empty:
results.append(df)
else:
failed_files.append(file)
except Exception as e:
print(f"[EXCEPTION] {file}: {e}")
failed_files.append(file)
print(f"[SUMMARY] Successfully processed: {len(results)} files")
print(f"[SUMMARY] Failed or empty: {len(failed_files)} files")
if not results:
raise ValueError("No valid dataframes to concatenate.")
final_df = pd.concat(results, ignore_index=True)
return final_df
< /code>
Пример ошибка[WARN] Empty DataFrame from: file_24.xlsx
[ERROR] Failed to process file_35.xlsx: [Errno 2] No such file or directory
[EXCEPTION] file_58.xlsx: cannot concatenate object of type ''
...
[SUMMARY] Successfully processed: 23 files
[SUMMARY] Failed or empty: 277 files
< /code>
Что я подтвердил: < /p>
Каждый поток работает в совершенно независимых файлах. Нет общего состояния. < /P>
< /li>
Все файлы существуют и являются действительными файлами Excel. < /P>
< /li>
При использовании одной и той же логики с Max_workers = 1, он постоянно преуспевает. Рабочие. /> < /li>
Слишком много одновременных считываний на диске? < /p>
< /li>
< /ul>
Вопросы: < /p>
Почему ничто не возвращает или не обращает на нет. DataFrames?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... rames-whil
Pandas ThreadPoolexeCutor с 16 работниками, которые приводят к отсутствию или нет DataFrames, в то время как 1 работник ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создайте цикл для перехода через 2 DataFrames и отформатируйте DataFrames
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Создайте цикл для цикла через 2 DataFrames и отформатировать DataFrames [Duplicate]
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
OpenGL ES, слишком раннее заполнение VBO и IBO приводит к отсутствию буферов?
Гость » » в форуме C++ - 0 Ответы
- 45 Просмотры
-
Последнее сообщение Гость
-
-
-
OpenGL ES, слишком раннее заполнение VBO и IBO приводит к отсутствию буферов?
Гость » » в форуме C++ - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Гость
-
-
-
Растворение полигонов в Python приводит к отсутствию некоторых полигонов.
Anonymous » » в форуме Python - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-