Untitled
unknown
python
2 years ago
5.7 kB
6
Indexable
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 = 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='Значение')
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_filesEditor is loading...
Leave a Comment