Untitled

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

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

cur_path = pathlib.Path().resolve() # текущий путь до папки
files_path = f'{cur_path}/info-stat-11-2023/01 промышленность'
files_path
'/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность'


import glob

data_files = sorted(glob.glob(f'{files_path}/01*.xls'))
data_files
['/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-01 индекс промышленного производства.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-02 добыча полезных ископаемых.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-03 обрабатывающие производства.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-04 обеспечение электр.энергией, газом и паром кондиционирование воздуха.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-05 водоснабжение  водоотведение  организация сбора  и утилизация отходов.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-06 отгрузка товаров.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-07 отгрузка-Рыболовство, рыбоводство.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-08 рыба морская живая.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-09 рыба морская свежая или охлажденная.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-10 рыба переработанная и консервированная.xls',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-11 производство электроэнергии.xls']




# Словарь для преобразования названия месяца в номер месяца
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}'

def process_file(file_path):
    
    data = pd.read_excel(file_path, header=3, engine='xlrd')
    
    # Создаем новые заголовки столбцов на основе названий месяцев и года
    new_headers = []
    current_year = 2016  # Начальный год
    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='Значение')

    # заменим пропуски значением 0, чтобы можно было загрузить в sql
    data = data.fillna(0)
    
    output_file_path = file_path.replace('.xls','.csv')
    data.to_csv(output_file_path, index=False)

for file in data_files:
    process_file(file)

data_files_csv = sorted(glob.glob(f'{files_path}/01*.csv'))
data_files_csv
['/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-01 индекс промышленного производства.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-02 добыча полезных ископаемых.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-03 обрабатывающие производства.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-04 обеспечение электр.энергией, газом и паром кондиционирование воздуха.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-05 водоснабжение  водоотведение  организация сбора  и утилизация отходов.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-06 отгрузка товаров.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-07 отгрузка-Рыболовство, рыбоводство.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-08 рыба морская живая.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-09 рыба морская свежая или охлажденная.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-10 рыба переработанная и консервированная.csv',
 '/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-11 производство электроэнергии.csv']


data = pd.read_csv('/home/jovyan/titorenko.aa/jupyter/converting/info-stat-11-2023/01 промышленность/01-01 индекс промышленного производства.csv')
data

	Регион	Дата	Значение
0	Российская Федерация	01.01.2016	99.1
1	Центральный федеральный округ	01.01.2016	94.1
2	Белгородская область	01.01.2016	99.4
3	Брянская область	01.01.2016	108.8
4	Владимирская область	01.01.2016	96.0
...	...	...	...
9305	Сахалинская область	01.11.2023	104.5
9306	Еврейская автономная область	01.11.2023	103.3
9307	Чукотский автономный округ	01.11.2023	138.7
9308	1 Агрегированный индекс производства по видам ...	01.11.2023	0.0
9309	2 Информация по Республике Бурятия и Забайкаль...	01.11.2023	0.0
9310 rows × 3 columns



Регион,Дата,ЗначениеРоссийская Федерация1,01.01.2016,105202.576Центральный федеральный округ,01.01.2016,21184.466Белгородская область,01.01.2016,85.506Брянская область2,01.01.2016,…Владимирская область,01.01.2016,354.893Воронежская область2,01.01.2016,…Ивановская область2,01.01.2016,…


Leave a Comment