我将一些日期时间信息提取到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..
到底发生了什么,什么是简单的解决方法?
我找到了一些以前的解决方案,但是似乎没有一个专门用于宿舍。例如,只能找出如何使用月份或年份。
答案 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]