当前位置: 首页 > 知识库问答 >
问题:

如何将日期格式QQ-YYYY转换为日期时间对象[重复]

养昊天
2023-03-14

我有一个pandas数据框,其中有一列应该表示一个财政季度的结束。格式为“Q1-2009”类型。是否有一种快速的方法将这些字符串转换为时间戳“2009-03-31”?

我发现只有格式“YYYY-QQ”的转换,但没有相反的转换。

共有2个答案

强硕
2023-03-14

一种解决方案是使用列表理解,然后是pd。补偿。蒙森德

# 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
伍捷
2023-03-14

创建季度周期与交换季度和年份部分由替换并转换为日期时间与周期ndex.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'))
 类似资料: