Python/Pandas - Convert type from pandas period to string

23,774

Solution 1

You can use to_series and then convert to 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')

Solution 2

The line below should convert your PeriodIndex to string format:

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

Solution 3

You can convert the items to strings by specifying basestring:

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

or if that doesn't work:

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

Refering to the comments from this answer, it might have to do with your pandas/python version.

Solution 4

If your index is a PeriodIndex, you can convert it to a str list as the following example shows:

import pandas as pd
pi = pd.period_range("2000-01", "2000-12", freq = "M")
print(list(pi.astype(str)))
Share:
23,774
aabujamra
Author by

aabujamra

Updated on July 09, 2022

Comments

  • aabujamra
    aabujamra almost 2 years

    I have a DataFrame:

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

    I used a pd.to_period in the DataFrame, so its index has turned into a Pandas period type (type 'pandas._period.Period').

    Now, I want to turn that index to strings. I'm trying to apply the following:

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

    However that doesn't work...

    ValueError: Cannot cast PeriodIndex to dtype |S0
    

    My code has been frozen since then.

    S.O.S.