Thường xuyên hơn, bạn sẽ có dấu thời gian unix được biểu thị bằng giây. Như trong vài giây từ nguồn gốc mặc định của 1970-01-01
Ví dụ: tại thời điểm viết bài này, chúng ta cách 1970-01-01 1.600.355.888 giây. Đó là rất nhiều giây
Chỉ định thứ tự phân tích ngày nếu arg là str hoặc danh sách thích của nó. Nếu Đúng, phân tích ngày bằng ngày đầu tiên, ví dụ: 11/10/12 được phân tích thành 2012-11-10. Cảnh báo. dayfirst=True không nghiêm ngặt, nhưng sẽ thích phân tích cú pháp với ngày đầu tiên [đây là một lỗi đã biết, dựa trên hành vi dateutil]
đầu năm. boolean, mặc định Sai
Chỉ định thứ tự phân tích ngày nếu arg là str hoặc danh sách thích của nó
- Nếu True phân tích cú pháp ngày có năm đầu tiên, ví dụ: 10/11/12 được phân tích cú pháp thành 2010-11-12
- Nếu cả ngày đầu tiên và năm đầu tiên đều đúng, thì năm đầu tiên được đặt trước [giống như dateutil]
Cảnh báo. yearfirst=True không nghiêm ngặt, nhưng sẽ thích phân tích cú pháp hơn với năm đầu tiên [đây là một lỗi đã biết, dựa trên hành vi dateutil]
utc. boolean, mặc định Không có
Trả về UTC Datetime Index nếu True [chuyển đổi bất kỳ ngày giờ nhận biết tz nào. các đối tượng datetime]
hộp. boolean, mặc định Đúng
- Nếu True trả về Datetime Index
- Nếu Sai trả về ndarray giá trị
định dạng. chuỗi, mặc định Không có
strftime để phân tích thời gian, ví dụ: “%d/%m/%Y”, lưu ý rằng “%f” sẽ phân tích cú pháp lên đến nano giây
chính xác. boolean, True theo mặc định
- Nếu Đúng, yêu cầu khớp định dạng chính xác
- Nếu Sai, cho phép định dạng khớp với bất kỳ đâu trong chuỗi đích
đơn vị. đơn vị của đối số [D,s,ms,us,ns] biểu thị đơn vị trong kỷ nguyên
[e. g. dấu thời gian unix], là số nguyên/số float
suy ra_datetime_format. boolean, mặc định Sai
trả lạiNếu Đúng và không có định dạng nào được cung cấp, hãy thử suy ra định dạng của chuỗi ngày giờ và nếu có thể suy ra được, hãy chuyển sang phương pháp phân tích cú pháp nhanh hơn. Trong một số trường hợp, điều này có thể tăng tốc độ phân tích cú pháp lên ~5-10 lần
rút lui. datetime nếu phân tích cú pháp thành công
Loại trả về phụ thuộc vào đầu vào
- giống như danh sách. Datetime Index
- Loạt. Chuỗi datetime64 dtype
- vô hướng. dấu thời gian
Trong trường hợp không thể trả lại các loại được chỉ định [e. g. khi bất kỳ phần tử nào của đầu vào nằm trước Dấu thời gian. phút hoặc sau Dấu thời gian. max] trả về sẽ có ngày giờ. loại ngày giờ [hoặc mảng/Sê-ri tương ứng]
ví dụ
Lắp ráp một ngày giờ từ nhiều cột của DataFrame. Các phím có thể là các từ viết tắt phổ biến như ['year', 'month', 'day', 'minute', 'second', 'ms', 'us', 'ns']] hoặc số nhiều của các từ giống nhau
>>> df = pd.DataFrame[{'year': [2015, 2016], 'month': [2, 3], 'day': [4, 5]}] >>> pd.to_datetime[df] 0 2015-02-04 1 2016-03-05 dtype: datetime64[ns]
Nếu một ngày không đáp ứng các giới hạn về dấu thời gian, việc chuyển lỗi=’coerce’ sẽ buộc phải NaT. Hơn nữa, điều này cũng sẽ buộc các ngày không phải là NaT
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT
Việc chuyển infer_datetime_format=True thường có thể tăng tốc độ phân tích cú pháp nếu nó không phải là định dạng ISO8601 chính xác mà ở định dạng thông thường
Làm việc với
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 trong Pandas đôi khi có thể khó khăn nếu cột
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 của bạn là một chuỗi có định dạng hỗn hợp, lộn xộn. Bạn sẽ cần thực hiện một số bước tiền xử lý và chuyển đổi các định dạng hỗn hợp thành loại
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 tiêu chuẩn để thực hiện mọi phân tích dữ liệu tiếp theo
Hãy cùng xem ví dụ sau. Trong khung dữ liệu này, chúng tôi có một cột có tên là 'joining_date' có vẻ là cột
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 nhưng thực ra là cột chuỗi. Hơn nữa, tất cả các ngày đều được sắp xếp theo các định dạng khác nhau
Ví dụ: đối với ID a0001, chuỗi ngày được sắp xếp trong DD. MM. Định dạng YYYY trong đó ngày được viết đầu tiên. Đối với ID a0005, chuỗi ngày được hiển thị ở định dạng DD-MM-YY trong đó ngày cũng được viết trước. Đối với ID a0002, chuỗi ngày được sắp xếp theo định dạng MM/DD/YYYY với tháng được viết trước, điều này phổ biến ở Hoa Kỳ. S
Hình ảnh của tác giả
Vậy chúng ta có thể làm gì để xóa cột chuỗi ngày lộn xộn có nhiều định dạng khác nhau một cách dễ dàng và hiệu quả?
Trước tiên, hãy thử phương pháp
df['joining_date'] = pd.to_datetime[df['joining_date']]
0 của Pandas có thể phân tích cú pháp bất kỳ chuỗi ngày hợp lệ nào thành >>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 một cách dễ dàng. Nếu chúng tôi chỉ đơn giản làm như sau mà không có bất kỳ đối số bổ sung nào, chúng tôi sẽ nhận được kết quả hiển thị bên dưới
df['joining_date'] = pd.to_datetime[df['joining_date']]
Hình ảnh của tác giả
Chúng ta có thể thấy rằng với phương thức
df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
0, chúng ta có thể phân tích các chuỗi ngày có định dạng hỗn hợp thành >>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 với định dạng chuẩn [mặc định là YYYY-MM-DD]. Vì theo mặc định,
df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
0 phân tích chuỗi có định dạng đầu tiên của tháng [MM/DD, MM DD hoặc MM-DD], nên nó trộn lẫn ngày và tháng cho các chuỗi ngày với định dạng ngày đầu tiên [e. g. , ĐD. MM. YYYY cho những ngày có dấu gạch chéo màu đỏ]Để khắc phục sự cố này, chúng ta chỉ cần thêm đối số
df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
3 vào mã bên dướidf['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
Vâng. Vì vậy, điều này đã khắc phục vấn đề trước đó nhưng tạo ra một vấn đề mới. Đối với chuỗi ngày có định dạng MM/DD/YYYY [hàng 7], vì chúng tôi đặt đối số
df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
4 thành df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
5, nó đã chuyển đổi 3/5/2016 thành 2016–03–05, coi 5 là ngày và 3 là Để khắc phục sự cố mới này, chúng ta có thể áp dụng điều kiện
df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
6 để chỉ đặt đối số df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
4 thành df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
5 cho các chuỗi ngày có ngày được viết trước>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT2
Hình ảnh của tác giả
nó hoạt động. Bây giờ chúng ta có một cột ngày rõ ràng hơn nhiều để làm việc với. Xin lưu ý rằng bạn cũng có thể chỉ định định dạng ngày đầu ra khác với định dạng mặc định, bằng cách sử dụng phương thức
df['joining_date'] = pd.to_datetime[df['joining_date'], dayfirst=True]
9. Ví dụ: bạn có thể chọn hiển thị ngày đầu ra là MM/DD/YYYY bằng cách chỉ định >>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT20
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT5
Hình ảnh của tác giả
của bạn đi. Không cần thực hiện bất kỳ thao tác chuỗi ưa thích nào, chúng tôi có thể chuyển đổi chuỗi ngày lộn xộn trong tập dữ liệu gốc thành cột
>>> pd.to_datetime['13000101', format='%Y%m%d'] datetime.datetime[1300, 1, 1, 0, 0] >>> pd.to_datetime['13000101', format='%Y%m%d', errors='coerce'] NaT6 tiêu chuẩn. Tôi hy vọng bạn đã học được một số thủ thuật về cách làm việc với các cột chuỗi ngày lộn xộn trong Pandas. Cảm ơn đã đọc và hy vọng bạn thích hướng dẫn ngắn này
Nguồn dữ liệu
Bộ dữ liệu mẫu được sử dụng trong bài đăng này được tạo bởi tác giả cho mục đích trình diễn
Bạn có thể mở khóa toàn quyền truy cập vào bài viết của tôi và phần còn lại của Phương tiện bằng cách đăng ký làm thành viên Phương tiện [$5 mỗi tháng] thông qua liên kết giới thiệu này. Bằng cách đăng ký qua liên kết này, tôi sẽ nhận được một phần phí thành viên của bạn mà bạn không phải trả thêm phí. Cảm ơn bạn