【问题标题】:Convert Quarter + Year (Datetime) into String in Pandas在 Pandas 中将季度 + 年(日期时间)转换为字符串
【发布时间】:2019-09-23 20:29:43
【问题描述】:

我在 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..

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

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

【问题讨论】:

  • 你的输入数据是什么样的?

标签: python pandas datetime


【解决方案1】:

试试:

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

【讨论】:

  • 效果很好。再次感谢您的帮助!即使在使用 Pandas 2 年后,其中一些语法仍然让我做噩梦。
【解决方案2】:

使用Periods,您可以访问%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]

【讨论】:

    猜你喜欢
    • 2022-07-04
    • 2017-03-30
    • 1970-01-01
    • 2021-11-11
    • 2021-12-08
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多