Python/Pandas - 将 pandas period 类型转换为字符串

20

我有一个数据框:

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

我在DataFrame中使用了pd.to_period,因此其索引已转换为Pandas周期类型(类型为'pandas._period.Period')。

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

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

然而那并不起作用...

ValueError: Cannot cast PeriodIndex to dtype |S0

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

救命啊。


1
df.index.strftime('%Y-%m') 对你有用吗? - Sergey Bushmanov
add this as an answer - maxymoo
4个回答

24
您可以使用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')

9
下面的代码行应该将你的PeriodIndex转换为字符串格式:
df.index = df.index.strftime('%Y-%m')

5
您可以通过指定basestring将项目转换为字符串:
df.index = df.index.astype(basestring)

如果那样不起作用:
df.index = df.index.map(str)

参考此答案中的评论,可能与您使用的pandas/python版本有关。

1
如果您的索引是PeriodIndex,您可以将其转换为strlist,如下例所示:
import pandas as pd
pi = pd.period_range("2000-01", "2000-12", freq = "M")
print(list(pi.astype(str)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接