Как отключить доступ к столбцам в pandas и динамически называть месяцы?

#python #arrays

#python #массивы

Вопрос:

Мне нужна помощь в преобразовании столбцов в строки и динамическом присвоении столбцам имен по месяцам.

Пожалуйста, посмотрите прикрепленное изображение raw_data

Например: допустим, текущий месяц — март, название месяца Demand00 будет March, Demand01 будет April и так далее. Если я запущу этот же код в апреле, имя столбца Demand00 должно быть названо April, а Demand01 — May и так далее.

Это мой первый пост, надеюсь, я дал вам необходимую информацию для обращения за помощью, если я что-то пропустил, пожалуйста, дайте мне знать.

Заранее благодарю вас за вашу помощь.

Комментарии:

1. Можете ли вы опубликовать свои данные в виде текста, а не изображения?

Ответ №1:

pd.DateOffset удобно вычислять следующие месяцы и stack может преобразовывать столбцы в строки.

Таким образом, код может быть:

 # compute month names:
cols = [x for x in df.columns if x.startswith('Demand')]
today = pd.Timestamp.now()
months=[(today pd.DateOffset(months=i)).month_name()
        for i in range(len(cols))]

# rename columns and stack:
df2 = pd.DataFrame(df.rename(columns=dict(zip(cols, months)))
                   .set_index('StockCode').stack()).reset_index()
df2.columns = ['StockCode', 'Month', 'Value']
  

Комментарии:

1. Спасибо, Серж. В строке «месяцы» произошла ошибка. Но вторая часть вашего кода помогла мне открепить данные. Возможно, я что-то пропустил здесь, но огромное спасибо.

Ответ №2:

Это должно сделать:

 import datetime as dt
import calendar

this_month=dt.datetime.now().month
demand_columns=[i for i in df.columns if 'Demand' in i]
month_list=[calendar.month_name[this_month i] for i in range(len(demand_columns))]
dic_month={col:month for col,month in zip(demand_columns,month_list)}
df.rename(columns=dic_month)
  

Строка 1 извлекает текущий месяц

Строка 2 извлекает каждый столбец, в названии которого есть ‘Demand’

Строка 3 создает список месяцев от сегодняшнего месяца до месяца вашего последнего столбца и преобразует month в виде целого числа в его название месяца

Строка 4 сопоставляет столбцы месяцам

Строка 5 переименовывает ваши столбцы.

Редактировать: добавлен ответ с названием месяца вместо числа

Комментарии:

1. Спасибо, Хуан, твой код помог мне динамически переименовывать столбцы по названию месяца.