13

Would like to change the Date index of the dataframe from the default style into '%m/%d/%Y' format.

In: df
Out: 

  Date     Close     

2006-01-24  48.812471
2006-01-25  47.448712
2006-01-26  53.341202
2006-01-27  58.728122
2006-01-30  59.481986
2006-01-31  55.691974

df.index

 Out: 
 DatetimeIndex(['2006-01-04', '2006-01-05', '2006-01-06', '2006-01-09',
           '2006-01-10', '2006-01-11', '2006-01-12', '2006-01-13',
           '2006-01-17', '2006-01-18',
           ...
           '2018-02-21', '2018-02-22', '2018-02-23', '2018-02-26',
           '2018-02-27', '2018-02-28', '2018-03-01', '2018-03-02',
           '2018-03-05', '2018-03-06'],
          dtype='datetime64[ns]', name=u'Date', length=3063, freq=None)

Into:

In: df1
Out: 

 Date     Close     

01/24/2006  48.812471
01/25/2006  47.448712
01/26/2006  53.341202
01/27/2006  58.728122
01/28/2006  59.481986
01/29/2006  55.691974

I tried this method before...

 df1.index = pd.to_datetime(df.index, format = '%m/%d/%Y')
 df1.index = df.dt.strftime('%Y-%m-%d')

 AttributeError: 'DataFrame' object has no attribute 'dt'
0

1 Answer 1

25

Use DatetimeIndex.strftime - instead dt need index:

df1.index = pd.to_datetime(df1.index, format = '%m/%d/%Y').strftime('%Y-%m-%d')

What is same:

df1.index = pd.to_datetime(df1.index, format = '%m/%d/%Y')
df1.index = df1.index.strftime('%Y-%m-%d')

EDIT if need convert DatetimeIndex to another string format:

print (df1.index)
DatetimeIndex(['2006-01-24', '2006-01-25', '2006-01-26', '2006-01-27',
               '2006-01-30', '2006-01-31'],
              dtype='datetime64[ns]', name='Date', freq=None)


df1.index = df1.index.strftime('%m/%d/%Y')
print (df1)
                Close
01/24/2006  48.812471
01/25/2006  47.448712
01/26/2006  53.341202
01/27/2006  58.728122
01/30/2006  59.481986
01/31/2006  55.691974
Sign up to request clarification or add additional context in comments.

5 Comments

How come the index name "Date" is gone?
@Maxi - Use df = df.rename_axis(None) or df.index.name = None
@jezreal Okay I tried this, but the date format is reverted back to the default format after I write the changed verstion to the csv? df1.index.name = 'Date' df1.to_csv(path) .
oops, I dont understnad. need df1.reset_index().to_csv(path+'RSI1.csv', index=False)
Note that this changes the type from pandas._libs.tslibs.timestamps.Timestamp to str!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.