Chuyển đổi loại cột DataFrame từ chuỗi sang định dạng datetime, dd / mm / yyyy


Câu trả lời:


473

Cách dễ nhất là sử dụng to_datetime:

df['col'] = pd.to_datetime(df['col'])

Nó cũng đưa ra một dayfirstlập luận cho thời đại châu Âu (nhưng hãy cẩn thận điều này không nghiêm ngặt ).

Đây là hành động:

In [11]: pd.to_datetime(pd.Series(['05/23/2005']))
Out[11]:
0   2005-05-23 00:00:00
dtype: datetime64[ns]

Bạn có thể vượt qua một định dạng cụ thể :

In [12]: pd.to_datetime(pd.Series(['05/23/2005']), format="%m/%d/%Y")
Out[12]:
0   2005-05-23
dtype: datetime64[ns]

cảm ơn vì phát lại của bạn, tôi có thể xác định định dạng của nó? như '% d /% m /% Y'? rất cảm kích
— perigee

2
@sh Bootstars có thể thấy stackoverflow.com/questions/13703720/
— Andy Hayden

1
@sh Bootstars đi qua mảng DatetimeIndex(df['col']).to_pydatetime()nên hoạt động.
— Andy Hayden

1
Nvm, tôi nhận xét quá sớm. Tìm kiếm cho SettingWithCopyWarningđủ tài liệu
— Sundeep

2
@daneshjai niềng răng đôi tạo ra một DataFrame (chỉ với một cột) so với niềng răng đơn có cột là Sê-ri.
— Andy Hayden

36

Nếu cột ngày của bạn là một chuỗi có định dạng '2017-01-01', bạn có thể sử dụng pandas astype để chuyển đổi nó thành datetime.

df['date'] = df['date'].astype('datetime64[ns]')

hoặc sử dụng datetime64 [D] nếu bạn muốn độ chính xác của Ngày và không phải là nano giây

print(type(df_launath['date'].iloc[0]))

sản lượng

<class 'pandas._libs.tslib.Timestamp'> giống như khi bạn sử dụng pandas.to_datetime

Bạn có thể thử nó với các định dạng khác sau đó '% Y-% m-% d' nhưng ít nhất điều này hoạt động.



2

Nếu bạn có một hỗn hợp các định dạng trong ngày của mình, đừng quên thiết lập infer_datetime_format=Trueđể làm cho cuộc sống dễ dàng hơn

df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)

Nguồn: pd.to_datetime

hoặc nếu bạn muốn một cách tiếp cận tùy chỉnh:

def autoconvert_datetime(value):
    formats = ['%m/%d/%Y', '%m-%d-%y']  # formats to try
    result_format = '%d-%m-%Y'  # output format
    for dt_format in formats:
        try:
            dt_obj = datetime.strptime(value, dt_format)
            return dt_obj.strftime(result_format)
        except Exception as e:  # throws exception when format doesn't match
            pass
    return value  # let it be if it doesn't match

df['date'] = df['date'].apply(autoconvert_datetime)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.