как создать столбцы месяца и года с использованием регулярных выражений и pandas

#python #pandas #datetime

#python #pandas #дата и время

Вопрос:

Привет, сообщество Stack overflow

Здесь у меня есть фрейм данных

 code        sum of August 
AA             1000         
BB             4000           
CC             72262          
  

Итак, есть два столбца [‘code’,’sum of August’]

Я должен преобразовать этот фрейм данных в столбцы [‘месяц’, ‘год’, ‘код’, ‘сумма за август’]

 month    year    code    sum of August
   8     2020     AA      1000
   8     2020     BB      4000
   8     2020     CC      72262
  

Поэтому столбец [‘сумма за август’] иногда называется просто [‘Август’] или [‘august’]. Также иногда это может быть [‘сумма за ноябрь’] или [‘ноябрь’] или [‘ноябрь’].

Я думал об использовании регулярных выражений для извлечения названия месяца и скрытия номера месяца.

Может ли кто-нибудь, пожалуйста, помочь мне с этим?

Заранее спасибо!

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

1. Вы можете использовать словарь для хранения ключа в виде числа и значения в виде названия месяца, поскольку месяцы будут постоянными

2. Привет @Karthik, но как мне извлечь название месяца из названия столбца?

Ответ №1:

Вы можете сделать следующее:

 month = {1:'janauary',
2:'february',
3:'march',
4:'april',
5:'may',
6:'june',
7:'july',
8:'august',
9:'september',
10:'october',
11:'november',
12:'december'}
  

Допустим, ваш фрейм данных называется df. Затем вы можете автоматически создать столбец месяц, используя следующее:

 df['month']=[i for i,j in month.items() if j in str.lower(" ".join(df.columns))][0]


  code  sum of August  month
0   AA           1000      8
1   BB           4000      8
2   CC          72262      8
  

Это означает, что если название месяца каким-либо образом присутствует в именах столбцов, верните номер этого месяца.

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

1. Это блестяще и просто. Я ценю ваше время.

Ответ №2:

Похоже, вы пытаетесь преобразовать названия месяцев в их номера, и столбцы могут быть прописными или строчными. Это может сработать:

 months = ['january','febuary','march','april','may','june','july','august','september','october','november','december']
monthNum = []#If you're using a list, just to make this run
sumOfMonths = ['sum of august','sum of NovemBer']#Just to show functionality
for sumOfMonth in sumOfMonths:
  for idx, month in enumerate(months):
    if month in sumOfMonth.lower():#If the column month name has any of the month keywords
      monthNum.append(str(idx   1)) #i'm just assuming that it's a list, just add the index   1 to your variable.
  

Я надеюсь, что это поможет! Конечно, это было бы не совсем то, что вы делаете, вы заполняете переменные и изменяете append(), если вы его не используете.