104

How should I transform from datetime to string? My attempt:

dates = p.to_datetime(p.Series(['20010101', '20010331']), format = '%Y%m%d')
dates.str

3 Answers 3

181

There is no .str accessor for datetimes and you can't do .astype(str) either.

Instead, use .dt.strftime:

>>> series = pd.Series(['20010101', '20010331'])
>>> dates = pd.to_datetime(series, format='%Y%m%d')
>>> dates.dt.strftime('%Y-%m-%d')
0    2001-01-01
1    2001-03-31
dtype: object

See the docs on customizing date string formats here: strftime() and strptime() Behavior.


For old pandas versions <0.17.0, one can instead can call .apply with the Python standard library's datetime.strftime:

>>> dates.apply(lambda x: x.strftime('%Y-%m-%d'))
0    2001-01-01
1    2001-03-31
dtype: object
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks @EdChum. But now I found another problem. If a have NaT.? How to solve it ? dates = p.to_datetime(p.Series(['20010101', '20010331',None]), format = '%Y%m%d') dates.apply(lambda x: x.strftime('%Y-%m-%d'))
Drop them first is one option so dates.dropna().apply(lambda x: x.strftime('%Y-%m-%d'))
@EdChum This still doesn't turn dates into strings. type(dates.df.strftime(...)) says <class 'pandas.core.series.Series'>. You need to add .tolist(). pandas version 0.25.3
52

As of pandas version 0.17.0, you can format with the dt accessor:

dates.dt.strftime('%Y-%m-%d')

1 Comment

this sped up my code 10 fold compared to using datetime.strftime inside a lambda function in a dataframe .apply() method (as suggested by @EdChum)
3

There is a pandas function that can be applied to DateTime index in pandas data frame.

date = dataframe.index #date is the datetime index
date = dates.strftime('%Y-%m-%d') #this will return you a numpy array, element is string.
dstr = date.tolist() #this will make you numpy array into a list

the element inside the list:

u'1910-11-02'

You might need to replace the 'u'.

There might be some additional arguments that I should put into the previous functions.

Comments

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.