Эффективная пакетная обработка данных в Python

Как использовать циклы for, модуль glob, модуль os, функцию Pandas read_excel() и сторонние библиотеки для пакетного чтения и обработки данных в Python

Спасибо, что были частью этого путешествия со мной, и я надеюсь продолжать приносить вам пользу долгие годы! Давать советы, поддерживая меня.

Привет друг, надеюсь, у тебя все хорошо! Я пишу вам сегодня, потому что я действительно горю желанием делиться своими знаниями и помогать другим учиться. Если вы нашли мои статьи полезными и они оказали положительное влияние на вашу жизнь, я был бы очень рад, если бы вы могли поддержать меня как приглашенный участник. Ваша поддержка не только помогает мне финансово, но и мотивирует меня продолжать создавать контент, который меняет жизни людей. Благодарю вас от всего сердца за то, что решили поддержать меня. Для меня очень важно получить вашу поддержку в этом путешествии.



Для вашего дальнейшего изучения

  1. Использование цикла 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.
  • Метод thepd.concat — объединяет все фреймы данных в df_list по строкам (ось = 0) и setignore_index=True для сброса индекса результирующего фрейма данных.
  • Thedf_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.

Если вы нашли какие-либо из моих статей полезными или полезными, рассмотрите возможность бросить мне кофе, чтобы помочь поддержать мою работу или оказать мне покровительство😊, используя

Патреон

Ko-fi.com

купитькофе

И последнее, но не менее важное: если вы еще не являетесь участником Medium и планируете им стать, я прошу вас сделать это по следующей ссылке. Я получу часть вашего членского взноса без каких-либо дополнительных затрат для вас.



Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.