#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(), если вы его не используете.