Разделите DataFrame Pandas по нескольким разделителям.

Вопрос или проблема

Я хочу разделить следующие данные, используя pandas, по следующим разделителям и сохранить файл в формате excel:
":", "Product", ",", "Qty", "-", "\", "Joining"

Мои образцы данных excel файла:

ColumnA
Tr. # 1 : Product XZA123, Qty 15 - Priya Singh | Jr. Sales Exe. | Bangalore | 2024 Joining
Tr. # 2 : Product BCD987, Qty 8 - Anjali Kumar - Sales Exe. - Chennai | 2023 Joining
.
.
.
Tr. # 6 : Product VWX987, Qty 20 - Aditi Malhotra - Sales Exe. - Delhi | 2022 Joining
Tr. # 7 : Product YZA321, Qty 22 - Rajesh Kulkarni | Sr. Sales Exe. | Chennai | 2023 Joining
Tr. # 8 : Product BCD432, Qty 9 - Meera Gupta - Jr. Sales Exe. - Mumbai | 2024 Joining
Tr. # 9 : Product HIJ876, Qty 15 - Sanya Iyer - Sr. Sales Exe. - Hyderabad | 2023 Joining
Tr. # 10 : Product KLM543, Qty 10 - Mohit Verma | Jr. Sales Exe. | Pune | 2024 Joining
Tr. # 11 : Product NOP432, Qty 5 - Priyanka Roy - Sales Exe. - Kolkata | 2022 Joining
Tr. # 12 : Product TUV654, Qty 18 - Neha Sharma - Jr. Sales Exe. - Mumbai | 2023 Joining
Tr. # 1077 :  Product VWX210, Qty 16 - Ritu Sharma - Sales Exe. - Chennai | 2024 Joining
Tr. # 1078 :  Product YZA654, Qty 13 - Karthik Reddy | Sr. Sales Exe. | Hyderabad | 2022 Joining
Tr. # 1079 :  Product BCD321, Qty 10 - Shreya Iyer - Jr. Sales Exe. - Mumbai | 2023 Joining
Tr. # 1080 :  Product HIJ432, Qty 19 - Amit Patel - Sr. Sales Exe. - Delhi | 2022 Joining

По какой-то причине данные не разделяются. У меня всего 1080 строк данных в excel, а вывод – 3245 строк.
Вот код, который я написал:

import pandas as pd

pd.set_option('display.max_rows', 1080)
pd.set_option('display.max_columns', 10)

df = pd.read_excel(r"C:\Users\node\Desktop\1300.xlsx")
print(df.ColumnA.str.split(r":Product |,|Qty|-|\| Joining",expand=True).add_prefix('Cols_'))

file_name="C:\Users\shah\Desktop\myfile.xlsx"
df.to_excel(file_name)

Вот вывод, который я получаю:

                            Cols_0 Cols_1 Cols_2  \
0         Tr. # 1 : Product XZA123           15    
1         Tr. # 2 : Product BCD987            8    
2         Tr. # 3 : Product JKL321           25    
3         Tr. # 4 : Product MNO654           30
.
.
.
.
                                                 Cols_3            Cols_4  \
0      Priya Singh | Jr. Sales Exe. | Bangalore | 20...              None   
1                                         Anjali Kumar        Sales Exe.    
2                                          Aarav Patel    Jr. Sales Exe.    
3       Ishaan Desai | Sales Exe. | Pune | 2024 Joining              None   
4                                          Nitya Mehra    Sr. Sales Exe.    
5  

Код также выдает следующую ошибку при сохранении файла excel:

(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

Как это можно исправить?

Ответ или решение

Для разделения данных в DataFrame библиотеки Pandas по нескольким разделителям и сохранения результата в формате Excel, необходимо немного скорректировать ваш код. Я предоставлю вам подробное описание процесса и объясню, как устранить ошибки.

Шаги для подготовки и разделения данных:

  1. Импортируем необходимые библиотеки: Убедитесь, что библиотека pandas установлена. Если нет, установите её с помощью pip install pandas.

  2. Чтение данных: Загружаем данные из Excel файла, используя метод pd.read_excel().

  3. Определение разделителей: Для разделения данных вы можете указать несколько разделителей, используя регулярные выражения в функции str.split(). В вашем случае необходимо использовать символы :, ,, -, | и слово Joining.

  4. Уточнение регулярного выражения: Ваша регулярная строка должна корректно обрабатывать все разделители. Пример для этого: r"\s*:\s*|\s*,\s*|\s*Qty\s*|\s*-\s*|\s*\\\s*|\s*Joining\s*".

  5. Сохранение результата: После разделения сохраните новый DataFrame в Excel-файл, обратив внимание на правильное использование обратных слешей в пути.

Исправленный код:

Вот исправленный и улучшенный код, который достигает ваших целей:

import pandas as pd

# Установим параметры отображения
pd.set_option('display.max_rows', 1080)
pd.set_option('display.max_columns', 10)

# Чтение данных из Excel файла
df = pd.read_excel(r"C:\Users\node\Desktop\1300.xlsx")

# Разделение по множественным разделителям
split_cols = df['ColumnA'].str.split(r"\s*:\s*|\s*,\s*|\s*Qty\s*|\s*-\s*|\s*\\\s*|\s*Joining\s*", expand=True)

# Переименование столбцов
split_cols = split_cols.add_prefix('Cols_')

# Сохранение результата в новый Excel файл
file_name = r"C:\Users\shah\Desktop\myfile.xlsx"
split_cols.to_excel(file_name, index=False)

Объяснение изменений:

  1. Регулярное выражение: Изменено на более составное, которое корректно обрабатывает пробелы вокруг разделителей и учитывает все ваши требования.

  2. Сохранение файла: Путь к файлу записан в r"" формате, что помогает избежать ошибок с символами переноса строки и другими специальными символами.

  3. Метод to_excel: Мы используем index=False, чтобы не сохранять индексы DataFrame в Excel.

Вероятные причины ошибок:

  • Ошибка юникода: Возникает из-за неправильного указания пути. При использовании \ в строках пути к файлу всегда нужно использовать r"" или заменять \ на /.

  • Неверное количество строк: Это может происходить из-за неправильного указания регулярного выражения, которое приводит к тому, что строки неправильно разбиваются. С улучшенным регулярным выражением количество строк должно быть правильным.

Таким образом, с помощью вышеупомянутого исправленного кода, вы сможете разделить ваши данные на необходимое количество колонок и успешно сохранить их в Excel формате.

Оцените материал
Добавить комментарий

Капча загружается...