Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
2.6 kB
1
Indexable
Never
import pandas as pd
import pathlib
import glob

# Обновленный словарь для преобразования названий периодов
period_dict = {
    'январь-март': '31.03',
    'январь-июнь': '30.06',
    'январь-сентябрь': '30.09',
    'январь-декабрь': '31.12'
}
# Функция для преобразования названий периодов и года в формат даты
def period_to_date(period_name, year):
    date_suffix = period_dict.get(period_name.lower(), '31.03')
    return f'{date_suffix}.{year}'

def convert_date(row):
    parts = row['Дата'].split('.')
    period = parts[0]
    year_suffix = int(parts[1]) if len(parts) > 1 and parts[1].isdigit() else 0
    year = 2016 + year_suffix

    if period in period_dict:
        return f"{period_dict[period]}.{year}"
    else:
        return row['Дата']

def process_file(file_path):
    data = pd.read_excel(file_path, header=3)
    
    new_headers = []
    current_year = 2016  # Установите начальный год данных
    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)
    data['Дата'] = data.apply(convert_date, axis=1)
    
    output_file_path = file_path.replace('.xlsx', '.csv')
    data.to_csv(output_file_path, index=False, sep=';', lineterminator='\t')




# Дополнительно: загрузка и проверка одного из файлов
file_path = '05-04 экспорт.xlsx'
processed_data = process_file(file_path)

data = pd.read_csv('05-04 экспорт.csv', sep=';', lineterminator='\t')
data
Leave a Comment