Эффективная пакетная обработка данных в Python
Как использовать циклы for, модуль glob, модуль os, функцию Pandas read_excel() и сторонние библиотеки для пакетного чтения и обработки данных в Python
Привет друг, надеюсь, у тебя все хорошо! Я пишу вам сегодня, потому что я действительно горю желанием делиться своими знаниями и помогать другим учиться. Если вы нашли мои статьи полезными и они оказали положительное влияние на вашу жизнь, я был бы очень рад, если бы вы могли поддержать меня как приглашенный участник. Ваша поддержка не только помогает мне финансово, но и мотивирует меня продолжать создавать контент, который меняет жизни людей. Благодарю вас от всего сердца за то, что решили поддержать меня. Для меня очень важно получить вашу поддержку в этом путешествии.
Для вашего дальнейшего изучения
- Использование цикла for
- Чтобы просмотреть все файлы одного типа, например файлы CSV в каталоге, и прочитать их один за другим
import os import pandas as pd path = 'path/to/directory' all_files = os.listdir(path) csv_files = [f for f in all_files if f.endswith('.csv')] df_list = [] for file in csv_files: df = pd.read_csv(os.path.join(path, file)) df_list.append(df) final_df = pd.concat(df_list, axis=0, ignore_index=True)
- Импортируйте 2 модуля Python:
os
иpandas
- Модуль
os
— обеспечивает способ работы с путями к файлам и каталогами. - Модуль
pandas
— Работа с табличными данными - Переменная
path
— укажите путь к каталогу, содержащему CSV-файлы. Этот путь следует заменить фактическим путем на компьютере пользователя. - Функция
os.listdir()
вызывается с переменнойpath
в качестве аргумента, которая возвращает список всех файлов в каталоге. - Пояснение списка
[f for f in all_files if f.endswith('.csv')]
используется для создания нового списка с именемcsv_files
, который включает только имена файлов, оканчивающиеся на.csv
. - Метод
endswith()
— фильтрация только с файлами CSV. - Пустой список с именем
df_list
создается для хранения каждого фрейма данных, который будет считан из CSV-файлов. - Цикл
for
— итерация по каждому файлу CSV в спискеcsv_files
. - Функция
pd.read_csv()
— чтение CSV-файла, и результирующий фрейм данных присваивается переменнойdf
. - Функция
os.path.join()
— соедините переменнуюpath
с текущим именем файла CSV, создав полный путь к файлу. - Функция
pd.read_csv()
— прочитать полный путь к файлу в CSV-файле. df_list
с использованием методаappend()
— добавьте текущий DataFramedf
- Функция
pd.concat()
— объединяет все фреймы данных в спискеdf_list
в один фрейм данных с именемfinal_df
. Для параметраaxis
установлено значение0
, чтобы объединить кадры данных по вертикали (т. е. разместить их друг над другом), а для параметраignore_index
установлено значениеTrue
, чтобы сбросить индекс конечного кадра данных. - Полученный
final_df
DataFrame содержит все данные из CSV-файлов в указанном каталоге, объединенные в одну таблицу.
Плюсы
- Просто и понятно
- Может использоваться для любого типа формата файла
Минусы
- Может быть медленным для больших наборов данных
- Требуется больше строк кода по сравнению с другими методами
Сценарий применения
- Когда у вас есть каталог, содержащий несколько файлов одного формата, и вы хотите прочитать каждый файл во фрейме данных Pandas и либо добавить их в список, либо объединить их в один фрейм данных. Это может быть полезно в тех случаях, когда у вас есть несколько CSV-файлов, содержащих схожие данные, например цены на акции, и вы хотите проанализировать их вместе.
2. Использование модуля Glob
- Пакетное чтение данных с помощью Python с использованием модуля glob для поиска файлов, соответствующих заданному шаблону/определенному критерию, например, всех файлов в каталоге с определенным префиксом или суффиксом.
import glob import pandas as pd path = 'path/to/directory/*.csv' df_list = [] for file in glob.glob(path): df = pd.read_csv(file) df_list.append(df) final_df = pd.concat(df_list, axis=0, ignore_index=True)
*
— подстановочный знак, который соответствует любой строке, поэтому этот шаблон соответствует любому файлу в каталогеpath/to/directory
, который заканчивается на.csv
.glob.glob(path)
— возвращает список путей к файлам, которые соответствуют заданному шаблонуpath
, в данном случае это'path/to/directory/*.csv'
.- Цикл
for
— итерация по списку путей к файлам, возвращенномуglob.glob()
pd.read_csv(file)
— прочитать файл CSV в DataFrame- Список
df_list
— добавьте текущий кадр данныхdf
- Функция
pd.concat()
— объединяет все фреймы данных в спискеdf_list
в один фрейм данных с именемfinal_df
. Для параметраaxis
установлено значение0
, чтобы объединить кадры данных по вертикали (т. е. сложить их друг над другом), а для параметраignore_index
установлено значениеTrue
, чтобы сбросить индекс конечного кадра данных. - Каждая строка имеет уникальный индекс
Обратите внимание, что предполагается, что все CSV-файлы в каталоге имеют одинаковые столбцы и типы данных, а порядок столбцов одинаков во всех файлах. Если файлы имеют разную структуру, может потребоваться дополнительная очистка и объединение перед их объединением.
Плюсы
- Эффективен для чтения нескольких файлов с похожими именами
- Может обрабатывать несколько форматов файлов
Минусы
- Может возвращать неожиданные результаты, если шаблон файла указан неправильно
- Может плохо работать со сложной структурой каталогов.
Сценарий применения
- Если вы хотите найти файлы в каталоге, которые соответствуют определенному шаблону или имеют определенное расширение файла. Это может быть полезно, когда у вас есть каталог, содержащий несколько типов файлов, и вы хотите читать файлы только определенного типа во фрейм данных.
3. Использование модуля ОС
- Работа с файлами и каталогами в Python.
- Прокрутите все файлы в каталоге и прочитайте их во фрейме данных.
import os import pandas as pd path = 'path/to/directory' df_list = [] for file in os.listdir(path): if file.endswith('.csv'): df = pd.read_csv(os.path.join(path, file)) df_list.append(df) final_df = pd.concat(df_list, axis=0, ignore_index=True)
- Импортируйте модуль
os
для операций с каталогами иpandas
для работы с фреймами данных. - Установите переменную
path ='path/to/directory'
в каталог, содержащий файлы CSV. Замените фактическим путем к каталогу - Инициализируйте пустой список
df_list
, который будет содержать все фреймы данных. - Цикл
for
— перебирает каждый файл в каталоге, используяos.listdir(path)
, и проверяет, имеет ли файл расширение.csv
, используя условиеfile.endswith('.csv')
. - Если файл является файлом CSV, метод
pd.read_csv
считывает файл во фрейм данных. df_list
— Добавить файлы в список- Функция
pd.concat()
— объединяет все фреймы данных в спискеdf_list
в один фрейм данных с именемfinal_df
. Для параметраaxis
установлено значение0
, чтобы объединить кадры данных по вертикали (т. е. разместить их друг над другом), а для параметраignore_index
установлено значениеTrue
, чтобы сбросить индекс конечного кадра данных.
Примечание. Используйте
os.listdir()
, чтобы получить все файлы в каталоге, а затем отфильтруйте только файлы CSV.
Плюсы
- Обеспечивает больший контроль над обработкой файлов
- Может использоваться для любого типа формата файла
Минусы
- Более сложный, чем использование цикла for
- Требуется больше строк кода по сравнению с другими методами
Сценарий применения
- Когда вы хотите перебрать все файлы в каталоге, независимо от их типа или формата, и прочитать их во фрейме данных Pandas. Это может быть полезно, когда у вас есть каталог, содержащий смесь разных типов файлов, и вы хотите проанализировать их все вместе.
4. Использование функции Pandas read_excel()
- Функция
read_excel()
— чтение файлов Excel, содержащих несколько листов, во фрейм данных.
import pandas as pd # Define the Excel file path excel_file = 'path/to/excel/file.xlsx' # Create an empty list to store dataframes df_list = [] # Iterate over each sheet in the Excel file for sheet_name in pd.read_excel(excel_file, sheet_name=None): # Read the sheet into a dataframe df = pd.read_excel(excel_file, sheet_name=sheet_name) # Append the dataframe to the list df_list.append(df) # Concatenate all dataframes into a single dataframe df_all = pd.concat(df_list, axis=0, ignore_index=True) # Print the concatenated dataframe print(df_all)
- Импортируйте модуль
pandas
- Установите путь к файлу Excel в переменную с именем
'path/to/excel/file.xlsx'
с фактическим путем к файлу Excel. Замените фактическим путем к файлу Excel df_list
— Инициализировать пустой список, содержащий все фреймы данных.- Цикл
for
— итерация по каждому листу в файле Excel с использованием функцииpd.read_excel
с параметромsheet_name
, установленным наNone
, который будет прочитан на всех листах. df
— В цикле снова используется функцияpd.read_excel
для чтения текущего листа во фрейм данных.df_list
— Текущий фрейм данных добавляется с использованием методаappend
.- Метод the
pd.concat
— объединяет все фреймы данных вdf_list
по строкам (ось = 0) и setignore_index=True
для сброса индекса результирующего фрейма данных. - The
df_all
— Результирующий объединенный фрейм данных - Функция _83 — Распечатайте результирующий объединенный фрейм данных.
Плюсы
- Простой и понятный для чтения файлов Excel
- Может обрабатывать несколько листов в одном файле Excel
Минусы
- Ограничено только чтением файлов Excel
- Может быть не так эффективен для больших наборов данных
Сценарий применения
- Когда у вас есть файл Excel, содержащий несколько листов, и вы хотите считать каждый лист в отдельный фрейм данных. Это может быть полезно в тех случаях, когда у вас есть большой файл Excel, содержащий данные по нескольким темам, и вы хотите проанализировать каждую тему отдельно. Например, если у вас есть файл Excel, содержащий данные как о ценах на акции, так и о ценах на жилье, и вы хотите проанализировать их отдельно, вы можете использовать функцию read_excel() для считывания каждого листа в отдельный фрейм данных.
5. Использование других сторонних библиотек
- PyPDF2 — Пакетное чтение нескольких файлов PDF
import PyPDF2 import os # Define the directory containing the PDF files pdf_dir = 'path/to/pdf/directory' # Create an empty list to store text content text_list = [] # Iterate over each PDF file in the directory for filename in os.listdir(pdf_dir): if filename.endswith('.pdf'): # Open the PDF file in read-binary mode with open(os.path.join(pdf_dir, filename), 'rb') as f: # Create a PDF reader object reader = PyPDF2.PdfReader(f) # Extract text content from all pages text = '' for page_num in range(reader.getNumPages()): page = reader.getPage(page_num) text += page.extractText() # Append the text content to the list text_list.append(text) # Print the text content of all PDF files print(text_list)
- Модуль импорта
PyPDF2
для работы с файлами PDF и модульos
для операций с каталогами - Установите переменную пути
pdf_dir= ‘path/to/pdf/directory’
в каталог, содержащий PDF-файлы, которые необходимо обработать. Замените фактическим путем к каталогу. - Инициализируйте пустой список
text_list
, который будет содержать все извлеченное текстовое содержимое. - Цикл
for
— перебирает каждый файл в каталоге, используяos.listdir(pdf_dir)
, и проверяет, имеет ли файл расширение.pdf
, используя условие имени файла.endswith('.pdf')
. - Метод
PyPDF2.PdfReader
— открывает файл в двоичном режиме чтения и создает объект чтения PDF, если файл является файлом PDF. - Внутренний цикл перебирает каждую страницу PDF-файла, используя
reader.getNumPages()
, и извлекает текстовое содержимое с каждой страницы, используяpage.extractText()
. - Извлеченное текстовое содержимое объединяется в одну строковую переменную text.
- Извлеченное текстовое содержимое добавляется с помощью метода append.
- После обработки всех PDF-файлов полный список извлеченного текстового содержимого выводится на консоль с помощью метода
print
.
Плюсы
- Может обрабатывать несколько форматов файлов, не поддерживаемых Pandas.
- Может предоставлять специализированные функции для определенных типов файлов.
Минусы
- Может потребоваться установка дополнительных библиотек
- Может потребоваться больше строк кода по сравнению с функциями Pandas.
Сценарий применения
- Он доступен для пакетной обработки данных в различных форматах, таких как PDF, JSON, XML и других. Эти библиотеки могут быть полезны, когда у вас есть данные в формате, изначально не поддерживаемом Python или Pandas.
Если вы нашли какие-либо из моих статей полезными или полезными, рассмотрите возможность бросить мне кофе, чтобы помочь поддержать мою работу или оказать мне покровительство😊, используя
И последнее, но не менее важное: если вы еще не являетесь участником Medium и планируете им стать, я прошу вас сделать это по следующей ссылке. Я получу часть вашего членского взноса без каких-либо дополнительных затрат для вас.
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.