2015-02-24 2 views
3

Я пытаюсь преобразовать столбец datetime обратно в строку в Dataframe Pandas.Преобразование столбца datetime в столбцы строки? Pandas - Python

синтаксис у меня до сих пор:

all_data['Order Day new'] = dt.date.strftime(all_data['Order Day new'], '%d/%m/%Y') 

но возвращает ошибку:

дескриптор «STRFTIME» требует «datetime.date» объект, но получил «серии».

Может ли кто-нибудь сказать мне, где я ошибаюсь.

ответ

6

Вы должны вызвать apply и передать данные strftime:

In [111]: 

all_data = pd.DataFrame({'Order Day new':[dt.datetime(2014,5,9), dt.datetime(2012,6,19)]}) 
print(all_data) 
all_data.info() 
    Order Day new 
0 2014-05-09 
1 2012-06-19 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 2 entries, 0 to 1 
Data columns (total 1 columns): 
Order Day new 2 non-null datetime64[ns] 
dtypes: datetime64[ns](1) 
memory usage: 32.0 bytes 

In [108]: 

all_data['Order Day new'] = all_data['Order Day new'].apply(lambda x: dt.datetime.strftime(x, '%Y-%m-%d')) 
all_data 
Out[108]: 
    Order Day new 
0 2014-05-09 
1 2012-06-19 
In [109]: 

all_data.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 2 entries, 0 to 1 
Data columns (total 1 columns): 
Order Day new 2 non-null object 
dtypes: object(1) 
memory usage: 32.0+ bytes 

Вы не можете назвать strftime на колонке, как он не понимает Series как парам, следовательно, ошибки

EDIT

Если вы используете версию 0.17.0 или выше, вы можете позвонить по этому телефону .dt.strftime, который векторизован:

all_data['Order Day new'] = all_data['Order Day new'].dt.strftime('%Y-%m-%d') 
Смежные вопросы