@Axeles
Нечего тут пока писать

Как с помощью Pandas разбить ячейку Excel?

Доброго времени сток. Подскажите пожалуйста как из Excel с помощью Python и библиотеки Pandas взять некоторые столбцы разбить их на Фамилию первую букву имени и отчества. Так что бы они были каждая в своей строке.
Вообще мне необходимо сравнить два файла, а для этого необходимо как я считаю привезти их к общему шаблону. Возможно я не прав, но метод такой работает в Excel. Да и всё бы хорошо но приходиться по 10-15 раз делать это действие.
На данном этапе я пытаюсь преобразовать один файл должно получиться в идеале так 5d892cfb7b6cc415638273.png
На данный момент всё что я имею это 5d892d53b0d7e742874079.png

исходный файл выглядит так 5d892dbdb0ff1338037405.png
Да и по самому коду есть некоторые вопросы. Я совсем не понимаю строчку 14 а именно почему после .str когда я ставлю . replace не подсвечивается в подсказках при нажатии ctrl+пробел. Будто его нет, но он работает.
import pandas as pd

# Опция отвечающая за вывод всех колонок в консоли
pd.set_option('display.expand_frame_repr', False)

# Указываем место расположения файла
pathFileOpen = r"E:\Learn_Python\tmp\Cписок август.xlsx"
pathFileSave = r"E:\Learn_Python\tmp\Список август (автоматический вариант).xlsx"

# Читаем данные из файлов с помощью панды
wb = pd.read_excel(pathFileOpen, sheet_name='Количество', header=5, usecols="A:D, G, H")

# Разбиваем на отдельные колонки ФИО
new_concatFrame = wb['ФИО клиента'].str.split(' ', expand=True)
# Называем вновь созданные колонки
new_concatFrame.columns = ['Фамилия', 'Имя', 'Отчество', 'Удалить']

# Присваиваем переменной DataFrame переменные wb и new_concatFrame для последующей склейки
DataFrame = [wb, new_concatFrame]

# Склеиваем двае переменные методом concat. Параметр axis=1 говорит о том что необходимо добавить столбцы с созданными именами
concatFrame = pd.concat(DataFrame, axis=1)
keysFilter = ['ВИП. 18-39 лет женщины',
              'ВИП. 18-39 лет мужчины',
              'ВИП. 40-62 года мужчины',
              'ВИП. 40-64 года женщины',
              'ВИП. 41-63 года женщины',
              'ВИП. 41-63 года мужчины',
              'ВИП. 45,55 лет мужчины',
              'ВИП. 50,60,64 года мужчины',
              'ВИП. 65-75 лет женщины',
              'ВИП. 65-75 лет мужчины',
              'ВИП. 66-74 лет женщины',
              'ВИП. 76 лет и > женщины',
              'ВИП. 76 лет и > мужчины']

# Фильтруем строки по заданным ключам
concatFrame = concatFrame.loc[concatFrame['Специальность / Тестирование'].isin(keysFilter)]

# Выбираем необходимые колонки для копирования
concatFrame = concatFrame[['Номер', 'ФИО клиента', 'Дата рождения']]

# for i in concatFrame:
#    print(concatFrame[i][:1])

# Уюираем значок № из файла
for column in concatFrame.columns:
    concatFrame[column] = concatFrame[column].str.replace('№', '')


concatFrame.to_excel(pathFileSave, sheet_name='Общий список', index=False, )
print(concatFrame)

# не работает (((
# writer = pd.ExcelWriter(pathFileSave, engine='xlsxwriter')
# concatFrame.to_Excel(writer, sheet_name='Общий список')
# writer.save()


print(type(concatFrame))
print(isinstance(concatFrame, list))


# list1 = []
# for i in fioRedact['Фамилия']:
#     for cell in i:
#         list1.append(cell.value)
#


# # Сохраняем полученный файл
# finalDF.to_excel(pathFileSave, sheet_name='Общий список', index=False, columns=['Полис', 'Дата рождения', 'Фамилия', 'Имя', 'Отчество'])
# writer = pd.ExcelWriter(pathFileSave)
# finalDF.to_Excel(writer, sheet_name='Общий список')


Если кто то может немного подсказать и направить в нужное русло огромное спасибо
Ссылка на файл
Download Cписок август.xlsx - Фотохостинг и file cloud
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
kshnkvn
@kshnkvn Куратор тега Python
t.me/kshnkvn
Честно говоря я не пробовал конкретно на ваших файлах(возможности сейчас нет), по-этому набросал в консоли:
>>> import pandas
>>> df = [{'name': 'Ivanov I', 'age': '136', 'iq': 0}]
>>> df = pandas.DataFrame(df)
>>> df
       name  age  iq
0  Ivanov I  136   0
>>> ndf = pandas.DataFrame(df.name.str.split().tolist(), columns=['p', 'n'])
>>> ndf
        p  n
0  Ivanov  I
>>> ndf.p = ndf.p.str[0]
>>> ndf
   p  n
0  I  I
1  A  A
2  N  N
>>> res = pandas.concat([df, ndf], sort=False, axis=1)
>>> res
       name  age  iq       p  n
0  Ivanov I  136   0  I  I
>>> res = res[['name', 'p', 'n', 'age', 'iq']]
>>> res
       name       p  n  age  iq
0  Ivanov I  I  I  136   0
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы