Untitled

mail@pastecode.io avatar
unknown
python
2 months ago
3.0 kB
1
Indexable
Never
from datetime import datetime
import pandas as pd

pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

# Словарь для преобразования названия месяца в номер месяца
month_dict = {
    'январь': '01',
    'февраль': '02',
    'март': '03',
    'апрель': '04',
    'май': '05',
    'июнь': '06',
    'июль': '07',
    'август': '08',
    'сентябрь': '09',
    'октябрь': '10',
    'ноябрь': '11',
    'декабрь': '12'
}

# Функция для преобразования названия месяца и года в формат даты
def month_to_date(month_name, year):
    # Преобразование названия месяца в номер месяца и создание строки даты
    month_num = month_dict.get(month_name.lower(), '01')  # Значение по умолчанию - январь
    return f'01.{month_num}.{year}'

# Считываем данные, начиная с четвертой строки (индекс 3)
data = pd.read_excel('data.xlsx', header=3)

# Создаем новые заголовки столбцов на основе названий месяцев и года
new_headers = []
current_year = 2015  # Начальный год
for col in data.columns:
    # Убираем числовой суффикс из названия месяца (если есть), чтобы применить словарь месяцев
    month_name = ''.join(filter(str.isalpha, col))
    if month_name.lower() in month_dict:
        # Преобразуем месяц и год в формат даты
        new_headers.append(month_to_date(month_name, str(current_year)))
        # Увеличиваем год, если месяц - декабрь
        if month_name.lower() == 'декабрь':
            current_year += 1
    else:
        # Для несоответствующих столбцов оставляем как есть
        new_headers.append(col)

# Обновляем заголовки в DataFrame
data.columns = new_headers

# Устанавливаем первый столбец в качестве индекса и меняем название
data.set_index(data.columns[0], inplace=True)
data.index.names = ['Регион']

# Сбросим индекс и добавим столбец "Регион" на первое место
data.reset_index(inplace=True)
# Перемещаем столбец "Регион" на первое место
data = data.set_index(['Регион']).reset_index()


# Убираем возможные дубликаты в названиях столбцов, которые могли появиться из-за суффиксов типа "2"
data = data.loc[:,~data.columns.duplicated()]

data = pd.melt(data, id_vars=['Регион'], var_name='Дата', value_name='Значение')

Leave a Comment