Pandas массовое переименование столбцов - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть файл Excel, в котором заголовки столбцов имеют даты. Даты охватывают около 100 столбцов. Я хочу переименовать все эти даты в месяц1, месяц2 и т. Д. я новичок в Pandas и Python.

Один из найденных мной способов - создать список новых имен столбцов, а затем заменить старые на новые, однако это означает, что мне нужно набрать более 100 колонны.

Есть ли способ получить условие, например, начиная со столбца 7 и далее, переименуйте все заголовки столбцов в Месяц1 + 1?

Example

как в месяц выше у меня это идет до 2028 года, поэтому нужно переименовать все это. т.е. с месяца 1 по месяц 12, затем перезапустите с апреля месяца 1-12

У меня есть что-то вроде этого;

 df_cols = ['Project Name', 'Project Principal', 'Value', 'value as per Vision', 'Proability', 
'Account', 'Phase', 'Number', 'ProjectType', 'Rolling 12mnths', 'Month0', 'Month1', 'Month2', 
'Month3', 'Month4', 'Month5', 'Month6', 'Month7', 'Month8', 'Month9', 'Month10', 'Month11', 
'Month12', 'Total']
 df.columns = df_cols

1 Ответ

0 голосов
/ 22 апреля 2020

IIU C, мы можем создать словарь, используя pd.to_datetime для получения номера месяца.

Я использовал список псевдо, но вам нужно изменить

format='%B_%Y') до format='%b_%Y')

или любой другой формат имени вашего столбца.

setup

import pandas as pd
import numpy as np
import calendar

year_cols = ['colA','colB'] + [f"{c}_{i}" for i in range(2020,2028) for c in calendar.month_name[1:]] 

nums = np.random.randint(0,500,size=len(year_cols))

df = pd.DataFrame([nums],columns=year_cols)

print(df.iloc[:,:7]) # print 7 columns

   colA  colB  January_2020  February_2020  March_2020  April_2020  May_2020
0   168   296           288            298         420         172       199

Создание словаря.

rename_dict = {i : f"Month{pd.to_datetime(i,format='%B_%Y').strftime('%m')}" 
               for i in df.iloc[:,2:].columns}

for k,v in rename_dict.items():
    if v == 'Month01':
        print(f'{k} -- > {v}')

January_2020 -- > Month01
January_2021 -- > Month01
January_2022 -- > Month01
January_2023 -- > Month01
January_2024 -- > Month01
January_2025 -- > Month01
January_2026 -- > Month01
January_2027 -- > Month01

переименование столбцов.

df = df.rename(columns=rename_dict)

print(df.iloc[:,:7]) # print 7 columns




   colA  colB  Month01  Month02  Month03  Month04  Month05
0   168   296      288      298      420      172      19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...