【发布时间】:2017-03-30 19:25:54
【问题描述】:
我有一个 pandas 数据框,其中一列包含年份和季度的字符串,格式如下:
2015Q1
我的问题: 如何将其转换为两个日期时间列,一个用于年份,一个用于季度。
【问题讨论】:
-
值得一提的是,pandas 有一个句点类型。
pd.Period('2015Q1')给你一个你称之为调用.year和.quarter的对象。并进行与期间相关的计算
我有一个 pandas 数据框,其中一列包含年份和季度的字符串,格式如下:
2015Q1
我的问题: 如何将其转换为两个日期时间列,一个用于年份,一个用于季度。
【问题讨论】:
pd.Period('2015Q1') 给你一个你称之为调用.year 和.quarter 的对象。并进行与期间相关的计算
您可以使用split,然后将year 列转换为int,如有必要,将Q 添加到q 列:
df = pd.DataFrame({'date':['2015Q1','2015Q2']})
print (df)
date
0 2015Q1
1 2015Q2
df[['year','q']] = df.date.str.split('Q', expand=True)
df.year = df.year.astype(int)
df.q = 'Q' + df.q
print (df)
date year q
0 2015Q1 2015 Q1
1 2015Q2 2015 Q2
你也可以使用Period:
df['date'] = pd.to_datetime(df.date).dt.to_period('Q')
df['year'] = df['date'].dt.year
df['quarter'] = df['date'].dt.quarter
print (df)
date year quarter
0 2015Q1 2015 1
1 2015Q2 2015 2
【讨论】:
您还可以构造一个 datetimeIndex 并在其上调用 year 和 Quarter。
df.index = pd.to_datetime(df.date)
df['year'] = df.index.year
df['quarter'] = df.index.quarter
date year quarter
date
2015-01-01 2015Q1 2015 1
2015-04-01 2015Q2 2015 2
请注意,如果您有 datetimeIndex,您甚至不需要专门的年份和季度列,您可以像这样进行 groupby,例如:df.groupby(df.index.quarter)
【讨论】: