如何将熊猫期间指数更改为小写?

时间:2019-01-22 03:53:27

标签: pandas indexing

我有一个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],它给出了

  

错误:“期间”对象没有属性“较低”

1 个答案:

答案 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只是一个数组句点,表示一小段时间。