Вопрос или проблема
Я хочу разделить следующие данные, используя 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, необходимо немного скорректировать ваш код. Я предоставлю вам подробное описание процесса и объясню, как устранить ошибки.
Шаги для подготовки и разделения данных:
-
Импортируем необходимые библиотеки: Убедитесь, что библиотека
pandas
установлена. Если нет, установите её с помощьюpip install pandas
. -
Чтение данных: Загружаем данные из Excel файла, используя метод
pd.read_excel()
. -
Определение разделителей: Для разделения данных вы можете указать несколько разделителей, используя регулярные выражения в функции
str.split()
. В вашем случае необходимо использовать символы:
,,
,-
,|
и словоJoining
. -
Уточнение регулярного выражения: Ваша регулярная строка должна корректно обрабатывать все разделители. Пример для этого:
r"\s*:\s*|\s*,\s*|\s*Qty\s*|\s*-\s*|\s*\\\s*|\s*Joining\s*"
. -
Сохранение результата: После разделения сохраните новый 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)
Объяснение изменений:
-
Регулярное выражение: Изменено на более составное, которое корректно обрабатывает пробелы вокруг разделителей и учитывает все ваши требования.
-
Сохранение файла: Путь к файлу записан в
r""
формате, что помогает избежать ошибок с символами переноса строки и другими специальными символами. -
Метод
to_excel
: Мы используемindex=False
, чтобы не сохранять индексы DataFrame в Excel.
Вероятные причины ошибок:
-
Ошибка юникода: Возникает из-за неправильного указания пути. При использовании
\
в строках пути к файлу всегда нужно использоватьr""
или заменять\
на/
. -
Неверное количество строк: Это может происходить из-за неправильного указания регулярного выражения, которое приводит к тому, что строки неправильно разбиваются. С улучшенным регулярным выражением количество строк должно быть правильным.
Таким образом, с помощью вышеупомянутого исправленного кода, вы сможете разделить ваши данные на необходимое количество колонок и успешно сохранить их в Excel формате.