Untitled
unknown
plain_text
2 years ago
2.2 kB
7
Indexable
import pandas as pd
import pathlib
import glob
# Обновленный словарь для преобразования названий периодов
period_dict = {
'1 квартал': '01.04',
'1 полугодие': '01.07',
'январь-сентябрь': '01.10',
'январь-декабрь': '01.01'
}
# Функция для преобразования названий периодов и года в формат даты
def period_to_date(period_name, year):
date_suffix = period_dict.get(period_name.lower(), '01.01')
return f'{date_suffix}.{year}'
def process_file(file_path):
data = pd.read_excel(file_path, header=3)
new_headers = []
current_year = 2023 # Установите начальный год данных
for col in data.columns:
period_name = ''.join(filter(str.isalpha, col))
if period_name.lower() in period_dict:
new_headers.append(period_to_date(period_name, str(current_year)))
if period_name.lower() == 'январь-декабрь':
current_year += 1
else:
new_headers.append(col)
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()
data = data.loc[:, ~data.columns.duplicated()]
data = pd.melt(data, id_vars=['Регион'], var_name='Дата', value_name='Значение')
data['Регион'] = data['Регион'].str.strip().str.replace(r'\s+', ' ', regex=True)
data['Значение'] = pd.to_numeric(data['Значение'], errors='coerce').fillna(0)
data = data[~data['Дата'].str.startswith('Unnamed')]
data.reset_index(drop=True, inplace=True)
output_file_path = file_path.replace('.xlsx', '.csv')
data.to_csv(output_file_path, index=False, sep=';', lineterminator='\t')
cur_path = pathlib.Path().resolve()
files_path = f'{cur_path}/info-stat-11-2023/12 зарплата'
data_files = sorted(glob.glob(f'{files_path}/12*.xlsx'))
for file in data_files:
process_file(file)
Editor is loading...
Leave a Comment