【问题标题】:Python/Pandas - Convert type from pandas period to stringPython/Pandas - 将类型从熊猫周期转换为字符串
【发布时间】:2016-04-20 09:55:57
【问题描述】:

我有一个数据框:

         Seasonal
Date             
2014-12 -1.089744
2015-01 -0.283654
2015-02  0.158974
2015-03  0.461538

我在DataFrame中使用了pd.to_period,所以它的索引变成了Pandas period类型(type 'pandas._period.Period')。

现在,我想将该索引转换为字符串。我正在尝试应用以下内容:

df.index=df.index.astype(str)

但是这不起作用...

ValueError: Cannot cast PeriodIndex to dtype |S0

我的代码从那时起就被冻结了。

求救

【问题讨论】:

  • df.index.strftime('%Y-%m') 会为您工作吗?
  • 将此添加为答案

标签: python pandas data-structures


【解决方案1】:

您可以使用to_series,然后转换为string

print df

#        Seasonal
#Date             
#2014-12 -1.089744
#2015-01 -0.283654
#2015-02  0.158974
#2015-03  0.461538

print df.index

#PeriodIndex(['2014-12', '2015-01', '2015-02', '2015-03'],
#              dtype='int64', name=u'Date', freq='M')

df.index=df.index.to_series().astype(str)
print df

#         Seasonal
#Date             
#2014-12 -1.089744
#2015-01 -0.283654
#2015-02  0.158974
#2015-03  0.461538

print df.index

#Index([u'2014-12', u'2015-01', u'2015-02', u'2015-03'], dtype='object', name=u'Date')

【讨论】:

    【解决方案2】:

    下面的行应该将您的PeriodIndex 转换为字符串格式:

    df.index = df.index.strftime('%Y-%m')
    

    【讨论】:

      【解决方案3】:

      您可以通过指定basestring将项目转换为字符串:

      df.index = df.index.astype(basestring)
      

      或者如果这不起作用:

      df.index = df.index.map(str)
      

      参考this answer 的 cmets,它可能与您的 pandas/python 版本有关。

      【讨论】:

        【解决方案4】:

        如果您的索引是PeriodIndex,您可以将其转换为str list,如下例所示:

        import pandas as pd
        pi = pd.period_range("2000-01", "2000-12", freq = "M")
        print(list(pi.astype(str)))
        

        【讨论】:

          猜你喜欢
          • 2015-09-19
          • 2018-08-09
          • 2018-05-26
          • 2021-09-19
          • 2016-11-14
          • 1970-01-01
          • 1970-01-01
          • 2017-09-17
          相关资源
          最近更新 更多