我有一个带有表示财务季度结束的列的pandas数据框,格式为"Q1-2009"。是否有一种快速的方法将这些字符串转换为时间戳,例如"2009-03-31"?
我只找到了从格式"YYYY-QQ"转换的方法,但是没有相反的方法。
replace
函数交换季度和年份部分,创建季度时间段,并使用PeriodIndex.to_timestamp
将其转换为日期时间。df = pd.DataFrame({'per':['Q1-2009','Q3-2007']})
df['date'] = (pd.PeriodIndex(df['per'].str.replace(r'(Q\d)-(\d+)', r'\2-\1'), freq='Q')
.to_timestamp(how='e'))
print (df)
per date
0 Q1-2009 2009-03-31
1 Q3-2007 2007-09-30
另一个解决方案是使用字符串索引:
df['date'] = (pd.PeriodIndex(df['per'].str[-4:] + df['per'].str[:2], freq='Q')
.to_timestamp(how='e'))
pd.offsets.MonthEnd
的一种解决方案:# data from @jezrael
df = pd.DataFrame({'per':['Q1-2009','Q3-2007']})
def get_values(x):
''' Returns string with quarter number multiplied by 3 '''
return f'{int(x[0][1:])*3}-{x[1]}'
values = [get_values(x.split('-')) for x in df['per']]
df['LastDay'] = pd.to_datetime(values, format='%m-%Y') + pd.offsets.MonthEnd(1)
print(df)
per LastDay
0 Q1-2009 2009-03-31
1 Q3-2007 2007-09-30
pd.to_datetime
返回一个 ValueError: ('Unknown string format:', 'Q1-2009')。 - AleB