我有一个dataframe
df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).mean()
通过取平均值将月份到季度的所有列名称合并。
但是,结果数据帧具有如下所示的列,并且我无法将所有大写字母Q更改为小写字母'q'。
PeriodIndex(['2000Q1', '2000Q2', '2000Q3', '2000Q4', '2001Q1', '2001Q2',
'2001Q3', '2001Q4', '2002Q1', '2002Q2', '2002Q3', '2002Q4',
'2003Q1', '2003Q2', '2003Q3', '2003Q4', '2004Q1', '2004Q2',
'2004Q3', '2004Q4', '2005Q1', '2005Q2', '2005Q3', '2005Q4',
'2006Q1', '2006Q2', '2006Q3', '2006Q4', '2007Q1', '2007Q2',
'2007Q3', '2007Q4', '2008Q1', '2008Q2', '2008Q3', '2008Q4',
'2009Q1', '2009Q2', '2009Q3', '2009Q4', '2010Q1', '2010Q2',
'2010Q3', '2010Q4', '2011Q1', '2011Q2', '2011Q3', '2011Q4',
'2012Q1', '2012Q2', '2012Q3', '2012Q4', '2013Q1', '2013Q2',
'2013Q3', '2013Q4', '2014Q1', '2014Q2', '2014Q3', '2014Q4',
'2015Q1', '2015Q2', '2015Q3', '2015Q4', '2016Q1', '2016Q2',
'2016Q3'],
dtype='period[Q-DEC]', freq='Q-DEC')
我尝试使用df.columns=[x.lower() for x in df.columns]
,它给出了
错误:“期间”对象没有属性“较低”
答案 0 :(得分:-1)
这看起来像是此处发布的问题的重复:Convert pandas._period.Period type Column names to Lowercase
基本上,您需要重新格式化“周期”输出以使其具有小写字母q,如下所示:
df.columns = df.columns.strftime('%Yq%q')
或者,如果您想直接修改PeriodIndex对象,则可以执行以下操作:
# get the PeriodIndex object you pasted in your question
periods = df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).mean()
# format the entries accordingly
periods = [p.strftime('%Yq%q') for p in periods]
%Y
表示年份格式,第一个q
是所需的小写字母“ q”,而%q
是四分位数。
Here是Period的strftime()
方法的文档,该方法返回格式化的时间字符串。在底部,他们有一些不错的例子!
查看熊猫documentation中列出的方法,lower()
对于Period对象不是可用的方法,这就是为什么会出现此错误的原因(PeriodIndex只是一个数组句点,表示一小段时间。