将Quarter + Year(日期时间)转换为Pandas中的字符串

时间:2019-09-23 20:29:43

标签: python pandas datetime

我将一些日期时间信息提取到Pandas的列中。例如,我有这样的宿舍:

df['quarter'] = pd.to_datetime(df['ddate'], format='%Y%m%d', errors='coerce').dt.quarter

我需要获取“季度”和“年份”列,并将它们合并为“ Q3_2017”之类的内容。我可以使它与这样的单个数据点一起正常工作:

'Q' + str(df['quarter'].iloc[0]) + '_' + str(df['year'].iloc[0]) 

但是当我尝试将“ str()”应用于整个列时,我得到了奇怪的结果。例如:

df['period'] = str(df['quarter'])

我得到的不是这样的四分之一(例如“ 1”):

7222 1\n185579 4\n185580 1\n2129..

到底发生了什么,什么是简单的解决方法?

我找到了一些以前的解决方案,但是似乎没有一个专门用于宿舍。例如,只能找出如何使用月份或年份。

2 个答案:

答案 0 :(得分:3)

尝试:

df['period'] = 'Q' + df['quarter'].astype(str) + '_' + df['year'].astype(str)

答案 1 :(得分:0)

使用Period,您可以访问%q以获得strftime。

import pandas as pd
df = pd.DataFrame({'ddate': pd.date_range('2010-01-01', freq='57D', periods=4)})

df.ddate.dt.to_period('Q').dt.strftime('Q%q_%Y')
0    Q1_2010
1    Q1_2010
2    Q2_2010
3    Q2_2010
Name: ddate, dtype: object

或者仅保留to_period的格式(如果需要,可以转换为字符串)

df.ddate.dt.to_period("Q")
0    2010Q1
1    2010Q1
2    2010Q2
3    2010Q2
Name: ddate, dtype: period[Q-DEC]