将字符串转换为日期 [带年份和季度]

Posted

技术标签:

【中文标题】将字符串转换为日期 [带年份和季度]【英文标题】:Convert String to Date [With Year and Quarter] 【发布时间】:2017-03-30 19:25:54 【问题描述】:

我有一个 pandas 数据框,其中一列包含年份和季度的字符串,格式如下:

2015Q1

我的问题: ​如何将其转换为两个日期时间列,一个用于年份,一个用于季度。

【问题讨论】:

值得一提的是,pandas 有一个句点类型。 pd.Period('2015Q1') 给你一个你称之为调用.year.quarter 的对象。并进行与期间相关的计算 【参考方案1】:

您可以使用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

【讨论】:

完美解决方案 - 非常感谢! 所以你真的不想要一个日期时间?【参考方案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)

【讨论】:

以上是关于将字符串转换为日期 [带年份和季度]的主要内容,如果未能解决你的问题,请参考以下文章

仅将带有年份和月份的字符串转换为仅适用于年份和月份的日期格式

将月份和年份列转换为带有附加字符串连接的日期列

将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错

如何在 Python 中将日期转换为季度?

转换日期格式:2 位年份到 4 位年份

如何在包含单词、三个字母月份和两位数字年份的字符串中搜索月份和年份并将它们转换为 SQL 中的日期?