Hướng dẫn python convert excel date to datetime - python chuyển đổi ngày excel thành datetime

from datetime import datetime
excel_date = 42139
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + excel_date - 2)
tt = dt.timetuple()
print(dt)
print(tt)

Như đã đề cập bởi J.F. Sebastian, câu trả lời này chỉ hoạt động cho bất kỳ ngày nào sau 1900/03/01

Chỉnh sửa: (trong câu trả lời cho @r.k)

Nếu

from datetime import datetime

def floatHourToTime(fh):
    hours, hourSeconds = divmod(fh, 1)
    minutes, seconds = divmod(hourSeconds * 60, 1)
    return (
        int(hours),
        int(minutes),
        int(seconds * 60),
    )

excel_date = 42139.23213
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + int(excel_date) - 2)
hour, minute, second = floatHourToTime(excel_date % 1)
dt = dt.replace(hour=hour, minute=minute, second=second)

print(dt)
assert str(dt) == "2015-05-15 00:13:55"
0 của bạn là số nổi, hãy sử dụng mã này:

from datetime import datetime

def floatHourToTime(fh):
    hours, hourSeconds = divmod(fh, 1)
    minutes, seconds = divmod(hourSeconds * 60, 1)
    return (
        int(hours),
        int(minutes),
        int(seconds * 60),
    )

excel_date = 42139.23213
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + int(excel_date) - 2)
hour, minute, second = floatHourToTime(excel_date % 1)
dt = dt.replace(hour=hour, minute=minute, second=second)

print(dt)
assert str(dt) == "2015-05-15 00:13:55"

Tuyên bố miễn trừ trách nhiệm: Nếu bạn không biết cách viết mã, vui lòng kiểm tra công cụ của chúng tôi www.cleanspreadsheets.com cho phép bạn thực hiện mã không này!

Nếu bạn lấy mẫu 100 người làm việc với dữ liệu và hỏi họ loại dữ liệu nào (văn bản, số, v.v.) thường mang đến cho họ nhiều rắc rối nhất, tôi đặt cược ít nhất một nửa trong số họ sẽ nói ngày.

Ngày là một mớ hỗn độn. Dường như có một tải trọng tào lao để định dạng chúng. Sau đó, các chương trình khác nhau sử dụng các phương thức khác nhau để xem một đoạn văn bản có phải là một ngày hay không. Điều này dẫn đến kẻ thù của dữ liệu - không đạt tiêu chuẩn và lộn xộn.

PSA: Tất cả chúng ta có thể đồng ý viết ngày là yyyy-mm-dd không? Nó sạch sẽ, dễ nhận biết và làm cho việc phân loại một cách dễ dàng. Vượt qua điều này và để cho kết thúc ngày này POCALYPSE một lần trong tất cả.Can we all please agree to write dates as YYYY-MM-DD? It’s clean, easy to recognize and makes sorting a breeze. Pass this on and let’s end this Date-pocalypse once in for all.

Làm cho cuộc sống dễ dàng hơn cho mọi người

Nhưng cho đến khi tất cả chúng ta có thể lên tàu với thông báo này, chúng ta thường xuyên cần chuyển đổi ngày thành một định dạng bất cứ khi nào chúng ta đang thực hiện phân tích dữ liệu.

Hướng dẫn này phác thảo một cách để chuyển đổi ngày trong bảng tính bằng Python và Pandas. Có nhiều cách để làm điều này nhưng chúng tôi đã thấy đây là cách dễ nhất.

Pre-requisite

Nếu bạn không biết cách sử dụng thiết bị đầu cuối và python, hoặc cách đọc và ghi các tệp bằng Python và Pandas, thì hãy xem qua hướng dẫn này trước tiên

Giới thiệu để đọc và viết bảng tính với Python

Tập tin

Chúng tôi sẽ sử dụng một tệp mẫu cho hướng dẫn này. Bạn có thể tải xuống bằng cách nhấp vào tên tệp: CustomerCalls.xlsx

Tệp này chứa một hàng cho các cuộc gọi được thực hiện cho khách hàng. Cột ngày mà chúng tôi sẽ được tiêu chuẩn hóa được đặt tên là DateTime được ghi lại và như được thấy bên dưới, có tất cả các loại định dạng ngày khác nhau.DateTime Recorded and as seen below there are all kinds of different date formats.

Chỉ có 1 đại diện đã sử dụng Yyyy-MM-DD. Chúng tôi còn một chặng đường dài để đi… .sigh

Mã đầy đủ

Mã đầy đủ bên dưới và bạn có thể làm theo cùng. Chúng tôi sẽ phá vỡ mã trong hướng dẫn

Mã đơn giản để chuyển đổi ngày thành bất kỳ định dạng nào bạn muốn

Tạo tệp cho mã

Mở một trình soạn thảo văn bản và tạo một tệp file.py. Lưu cái này trong cùng một thư mục với tệp CustomerCalls.xlsx

Nhập thư viện

Dòng 1

Nhập thư viện Pandas để đọc, chuyển đổi ngày và viết bảng tính.

import pandas as pd

Đọc tệp

Dòng 4

Chúng tôi sẽ đọc bảng tính bằng cách sử dụng gấu trúc và lưu trữ kết quả trong khung dữ liệu của khách hàng_calls

customer_calls = pd.read_excel("CustomerCalls.xlsx")

Chuyển đổi ngày thành Yyyy-MM-DD & Viết chuyển đổi sang tệp mới

Dòng 7 trận8

Bây giờ, hãy để Lôi nhìn vào dòng mã chuyển đổi ngày. Đây là thịt của hướng dẫn vì vậy chúng tôi sẽ mổ xẻ nó một cách chi tiết.

customer_calls["DateTime Recorded"] = pd.to_datetime(customer_calls["DateTime Recorded"]).dt.strftime("%Y-%m-%d")

Phía bên phải của dòng làm một vài điều:

  1. Nó truy cập vào cột được ghi lại từ khung dữ liệu và sau đó chuyển đổi cột thành kiểu dữ liệu DateTime. Chúng ta cần phải làm điều này trước khi chúng ta có thể làm bất cứ điều gì trên cột này liên quan đến ngày.DateTime Recorded column from the data frame and then converts the column to a datetime data type. We need to do this before we can do anything on this column related to dates.
pd.to_datetime(customer_calls["DateTime Recorded"])

2. Sau đó, chúng tôi gọi phương thức DT và Strftime có giá trị,%Y-%M-%D, cho Python nói về việc chúng tôi muốn định dạng ngày như thế nào. Hãy gọi cho đây là chuỗi định dạng ngày. Chúng tôi sẽ xem xét cách tạo giá trị này cho bất kỳ định dạng nào sau này trong hướng dẫn.date format string. We will be looking at how to create this value for any format a little later on in the tutorial.

.dt.strftime("%Y-%m-%d")

Phía bên trái của dòng gán kết quả của việc chuyển đổi trở lại cột được ghi lại của DateTime của khung dữ liệu client_calls.DateTime Recorded column of the customer_calls data frame.

customer_calls["DateTime Recorded"] =

Sau đó, chúng tôi viết khung dữ liệu này với cột được chuyển đổi thành một tệp mới. Bạn có thể mở và kiểm tra nó cho ngày chuyển đổi.

customer_calls.to_excel("CustomerCalls_YYYY_MM_DD.xlsx")

Tạo chuỗi định dạng ngày

Chuyển đổi sang bất kỳ định dạng nào khác yêu cầu chuỗi định dạng ngày thích hợp. Python cung cấp một bản đồ của các phần phổ biến khác nhau của ngày, chẳng hạn như năm 4 chữ số (2019), và những gì chúng tương ứng với trong Python, chẳng hạn như %y.date format string. Python provides a mapping of the various common parts of the date, such as a 4 digit Year (2019), and what they correspond to in Python, such as %Y.

Trong các tài liệu chính thức, điều này được gọi là một chỉ thị. Sau đó, bạn có thể sử dụng chúng để tạo chuỗi định dạng ngày và chuyển đổi ngày. Python sẽ thay thế các chỉ thị bằng giá trị ngày thích hợp được định dạng.date format string and convert the dates. Python will replace the directives with the appropriate date value formatted.

Ví dụ: %y là cả năm, %m là tháng với 2 chữ số và %d là ngày có 2 chữ số. Nếu chúng tôi muốn yyyy-mm-dd thì chúng tôi chỉ định%y-%m-%d. Nếu chúng tôi muốn DD/mm/yyyy, thì chúng tôi chỉ định%D/%m/%y.

Chúng ta có thể chỉ định bất cứ điều gì như ngày %D Day của %m tháng tuyệt vời của %y năm, sẽ chuyển đổi tất cả các ngày thành 24 ngày của 02 tháng tuyệt vời của năm 2019.

Hãy cùng xem một bản đồ dưới đây. Bạn cũng có thể đọc về điều này trong các tài liệu chính thức:

Như bạn có thể thấy có nhiều cách để đại diện cho hầu hết mọi thứ

Ví dụ cho ngày 22 tháng 9 năm 2019, 5:30 chiều

  1. “ %A, %b %d” -> Chủ nhật, ngày 22 tháng 9
  2. Cấm%D-%B-%Y,->
  3. Cấm %D %B, %Y - %I: %M %P trong %Z Timezone, -> Ngày 22 tháng 9 năm 2019

Một lần nữa, như bạn có thể thấy chuỗi định dạng ngày có thể chứa bất cứ thứ gì trong đó. Các chỉ thị được đánh dấu bằng % được thay thế bằng định dạng ngày thích hợp và mọi thứ khác vẫn giữ nguyên.date format string can contain anything in it. The directives marked by % get replaced with the appropriate date format and everything else remains the same.

Để chuyển đổi DateTime được ghi thành một cái gì đó như chuỗi định dạng ngày 22 tháng 9 của bạn sẽ là%D-%B-%Y và dòng mã của bạn để chuyển đổi ngày trở thànhDateTime Recorded to something like 22-Sep-19 your date format string would be “%d-%b-%y” and your line of code to convert dates becomes the following

customer_calls["DateTime Recorded"] = pd.to_datetime(customer_calls["DateTime Recorded"]).dt.strftime("%d-%b-%y")

Hãy thử các kết hợp khác nhau và xuất các tệp để thử nghiệm.

Những thứ bổ sung

Có một số điều bạn có thể gặp phải trong khi chuyển đổi ngày.

  1. Hàm Pd.TO_DateTime không chuyển đổi ngày của bạn thành các đối tượng DateTime. Điều này sẽ xảy ra nếu có bất cứ điều gì khác trong cột của bạn ngoại trừ ngày hoặc nếu một ngày quá kỳ quặc đến nỗi Pandas có thể nhận ra nó. Bạn sẽ phải định dạng lại/xóa giá trị vi phạm hoặc sử dụng một phương pháp khác để chuyển đổi ngày.
  2. Nếu việc chuyển đổi sang đối tượng DateTime không thành công thì sẽ có một cách để chuyển đổi chúng và phương thức strftime sẽ thất bại

Nếu bạn muốn có một ứng dụng tùy chỉnh, dữ liệu được làm sạch hoặc dự án được xây dựng bằng bảng tính, bạn có thể xem dịch vụ tư vấn của chúng tôi tại đây: https://www.lovespreadsheet.com!