Hôm nay chúng ta sẽ học cách trừ ngày trong Python. Ở đây chúng tôi sẽ cung cấp một số ví dụ để chúng ta có thể học phép trừ ngày từ một ngày trong Python
Vì vậy, trong hướng dẫn Python này, chúng ta sẽ học những điều sau
- Trừ ngày từ một ngày cụ thể
- Trừ ngày từ ngày hiện tại
Trừ ngày từ một ngày trong Python
Để trừ ngày từ một ngày, chúng tôi sẽ sử dụng mô-đun datetime
Từ mô-đun này, chúng tôi sẽ nhập các lớp sau
- ngày giờ
- múi giờ
from datetime import datetime, timedelta
Trừ ngày từ ngày hiện tại trong Python
Chương trình dưới đây sẽ trừ bất kỳ ngày cụ thể nào kể từ ngày hiện tại
from datetime import datetime, timedelta current_date = datetime.now[] new_date = current_date - timedelta[days=52] print [new_date]
đầu ra
$ python codespeedy.py 2019-02-10 23:39:28.749808
Chúng ta cũng có thể sử dụng datetime. hôm nay [] thay vì datetime. now[] cả hai sẽ cung cấp cho bạn cùng một đầu ra
Cả hai sẽ trả về thời gian ngày hiện tại. [Ngày địa phương hoặc hệ thống]
đối tượng timedelta về cơ bản có thể được sử dụng để làm việc với thời gian. Nó giúp chúng ta biểu thị khoảng thời gian. Trong chương trình trên, bạn có thể thấy chúng tôi đã sử dụng timedelta[days=52] có nghĩa là nó sẽ biểu thị thời gian là ngày 52
current_date là một biến để lưu trữ ngày giờ hiện tại. Sử dụng toán tử “-”, chúng tôi đã trừ đi 52 ngày từ ngày_hiện_tại
Đối tượng timedelta
từ mô-đun datetime
cho phép bạn trừ bất kỳ số ngày nào khỏi đối tượng ngày tháng
Trong ví dụ này, tôi luôn lấy ngày hiện tại bằng phương thức date.today[]
Sau đó, tôi đặt timedelta
trong 2 ngày và trừ đi từ current_date
from datetime import timedelta, date
current_date = date.today[]
print[current_date]
past_date = current_date - timedelta[days=2]
print[past_date]
2020-04-27
2020-05-25
Xem nội dung này
Bài viết này dựa trên Rivers Clothing và có các ví dụ về cách đặt và trừ một ngày x số ngày, VÀ, cách trừ một ngày khỏi một ngày khác
💬 câu hỏi. Làm thế nào chúng ta sẽ viết mã Python để trừ ngày từ một ngày?
Chúng ta có thể hoàn thành nhiệm vụ này bằng một trong các tùy chọn sau
- Phương pháp 1. Sử dụng
datetime.timedelta[]
- Phương pháp 2. Sử dụng
arrow
và$ pip install pandas
0 - Phương pháp 3. Sử dụng
$ pip install pandas
1 - Phương pháp 4. Sử dụng
$ pip install pandas
2 - Thưởng. Đọc CSV và trừ các cột ngày
Sự chuẩn bị
Trước khi bất kỳ thao tác dữ liệu nào có thể xảy ra, hai [2] thư viện mới sẽ yêu cầu cài đặt
- Thư viện mũi tên dễ dàng truy xuất ngày và giờ
- Thư viện Pandas cho phép truy cập vào/từ DataFrame
Để cài đặt các thư viện này, hãy điều hướng đến thiết bị đầu cuối IDE. Tại dấu nhắc lệnh [_______5_______3], hãy thực thi mã bên dưới. Đối với thiết bị đầu cuối được sử dụng trong ví dụ này, dấu nhắc lệnh là ký hiệu đô la [
$ pip install pandas3]. Lời nhắc thiết bị đầu cuối của bạn có thể khác
$ pip install arrow
Nhấn phím
$ pip install pandas5 trên bàn phím để bắt đầu quá trình cài đặt
$ pip install pandas
Nhấn phím
$ pip install pandas5 trên bàn phím để bắt đầu quá trình cài đặt
Nếu quá trình cài đặt thành công, một thông báo sẽ hiển thị trong thiết bị đầu cuối cho biết điều tương tự
Vui lòng xem hướng dẫn cài đặt PyCharm để biết các thư viện cần thiết
- Cách cài đặt Mũi tên trên PyCharm
- Cách cài đặt Pandas trên PyCharm
Thêm đoạn mã sau vào đầu mỗi đoạn mã. Đoạn mã này sẽ cho phép mã trong bài viết này chạy không có lỗi
import datetime from datetime import date import arrow import pandas as pd
Phương pháp 1. sử dụng ngày giờ. múi giờ[]
Phương thức này lấy ngày hiện tại dưới dạng một chuỗi và chia nó thành một Danh sách. Sau đó, ngày hiện tại [
$ pip install pandas7] được định cấu hình và mười [
$ pip install pandas8] ngày được trừ đi [
$ pip install pandas9] từ cùng một ngày để trả về một ngày mới
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]
Mã này làm như sau
- Khai báo
import datetime from datetime import date import arrow import pandas as pd
0 truy xuất ngày hiện tại [import datetime from datetime import date import arrow import pandas as pd
1] và tách chuỗi ngày trên dấu gạch nối [import datetime from datetime import date import arrow import pandas as pd
2]. Điều này trả về ngày hiện tại dưới dạng Danh sách các chuỗiimport datetime from datetime import date import arrow import pandas as pd
3 - Khai báo
import datetime from datetime import date import arrow import pandas as pd
4 gọiimport datetime from datetime import date import arrow import pandas as pd
5 và nhận ba [3] đối số nguyên. năm hiện tại [import datetime from datetime import date import arrow import pandas as pd
6], tháng hiện tại [import datetime from datetime import date import arrow import pandas as pd
7] và ngày, [import datetime from datetime import date import arrow import pandas as pd
8 - Khai báo
import datetime from datetime import date import arrow import pandas as pd
9 sử dụngget_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]
0 và truyền vào một số nguyên, [get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]
1 là số ngày cần trừ đi ngày ban đầu [import datetime from datetime import date import arrow import pandas as pd
8 - Khai báo
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]
3 và trừ đi$ pip install pandas
7 từimport datetime from datetime import date import arrow import pandas as pd
9
Cuối cùng, nội dung của
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]3 được gửi đến thiết bị đầu cuối
đầu ra
Bảng lương của Rivers Clothing cho tháng hiện tại được đặt thành ngày tiếp theo
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]7
Phương pháp 2. Sử dụng mũi tên và shift[]
Phương pháp này sử dụng thư viện arrow
, để lấy ngày hiện tại [
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]9]. Sau đó,
$ pip install pandas0 được áp dụng tương tự để trừ đi số ngày kể từ ngày hiện tại, dẫn đến một ngày mới
get_today = arrow.utcnow[] new_payday = get_today.shift[days=-3] print[str[new_payday][:10]]
Mã này làm như sau
- Khai báo
import datetime from datetime import date import arrow import pandas as pd
0 truy xuất ngày hiện tại [import datetime from datetime import date import arrow import pandas as pd
1] và trả về một đối tượng ngày tháng - Khai báo
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]
3 áp dụng từ$ pip install pandas
0 đếnimport datetime from datetime import date import arrow import pandas as pd
0 và chuyển số ngày để trừ [get_today = arrow.utcnow[] new_payday = get_today.shift[days=-3] print[str[new_payday][:10]]
6]
Cuối cùng, đầu ra được gửi đến thiết bị đầu cuối
Hướng dẫn cơ bản để cắt lát trong Python
Xem video này trên YouTube
Đầu ra 1
Nếu
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]3 được xuất ra thiết bị đầu cuối mà không chuyển đổi nó thành chuỗi và áp dụng cắt, sau đây sẽ là đầu ra
get_today = arrow.utcnow[] new_payday = get_today.shift[days=-3] print[str[new_payday][:10]]8
Đầu ra 2
Nếu
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]3 được chuyển đổi thành kiểu dữ liệu chuỗi và áp dụng phép cắt, thì kết quả sau đây sẽ là kết quả
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]0
Phương pháp 3. Sử dụng Pandas DateOffset[]
Trong phương thức này,
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]1 được gọi và tạo một đối tượng ngày tháng. Đối tượng ngày này được sửa đổi bằng cách chỉ ra số ngày cần trừ [_______49_______2] khỏi ngày ban đầu để trả về ngày mới
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]
💡Lưu ý. Ngoài các thư viện bắt buộc đã đề cập trong phần Chuẩn bị, phương pháp này cần thêm một mục từ thư viện datetime được nhập như sau.
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]3
Mã này sau đó thực hiện như sau
- Khai báo
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]
4 và gán cho nó một chuỗi Ngày - Tiếp theo,
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]
4 gọifrom datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]
6 nhận hai [2] đối số. một chuỗi ngày và trả về một đối tượng ngày - Sau đó, ba [3] ngày được trừ vào
from datetime import datetime cur_date = '2022-05-27' date_obj = datetime.strptime[cur_date, '%Y-%m-%d'] new_payday = date_obj - pd.DateOffset[days=3] print[str[new_payday][:10]]
4 và được lưu vàoget_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]
3
Cuối cùng, đầu ra được gửi đến thiết bị đầu cuối
Đầu ra 1
Nếu
get_today = str[date.today[]].split['-'] std_payday = datetime.date[int[get_today[0]], int[get_today[1]], 25] chg_days = datetime.timedelta[10] new_payday = std_payday - chg_days print[new_payday]3 được xuất ra thiết bị đầu cuối mà không chuyển đổi nó thành chuỗi và áp dụng cắt, sau đây sẽ là đầu ra
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]0
Đầu ra 2
Nếu ________18_______3
được chuyển đổi thành kiểu dữ liệu chuỗi và áp dụng phép cắt, thì kết quả sau đây sẽ là
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]2
Phương pháp 4. Sử dụng Pandas để trừ các cột ngày
Nếu bạn không muốn đặt ngày mới mà muốn tìm sự khác biệt giữa ngày này với ngày khác thì sao?
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
Mã này làm như sau
- Đầu tiên, một DataFrame được tạo có chứa hai [2] cột.
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
3 vàdf = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
4. Kết quả lưu vàodf = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
5 - Hai [2] dòng sau đây thêm hai [2] hàng vào DataFrame
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
5 và lưu vào biến thích hợp [df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
7 hoặcdf = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
8] - Sau đó, hai [2] dòng này được chuyển đổi thành đối tượng Datetime và được lưu vào biến thích hợp được đề cập ở trên
- Hai [2] ngày được trừ và lưu vào
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
9
Cuối cùng, đầu ra được gửi đến thiết bị đầu cuối
10 phút để gấu trúc trong 5 phút [Được rồi 8]
Xem video này trên YouTube
đầu ra
0355 ngày192 ngàydtype. timedelta64[ns]Thưởng. Đọc CSV và trừ các cột ngày
Nếu bạn không muốn đặt ngày mới mà muốn tìm sự khác biệt giữa ngày này với ngày khác thì sao?
df = pd.read_csv['dates.csv', usecols=['hired', 'fired'], header=0] df['hired'] = pd.to_datetime[df['hired'], errors='coerce'] df['fired'] = pd.to_datetime[df['fired'], errors='coerce'] df['diff'] = df['fired'] - df['hired'] print[df]
Mã này làm như sau
- Đọc trong tệp CSV nhỏ chứa hai [2] hàng. Mỗi hàng có ngày thuê và ngày sa thải và lưu vào df
- Hai [2] dòng sau đây chuyển đổi các cột DataFrame
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
3 vàdf = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
4 thành một đối tượng Ngày và lưu vào cùng một - Tiếp theo, một cột khác biệt mới được thêm vào và chứa số ngày giữa ngày
df = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
4 và ngàydf = pd.DataFrame[columns=['hired', 'fired']] df.hired = ['2020-01-24', '2022-01-27'] df.fired = ['2021-01-13', '2022-04-29'] df.hired = pd.to_datetime[df.hired] df.fired = pd.to_datetime[df.fired] diff = [df.fired - df.hired] print[diff]
3
Cuối cùng, đầu ra được gửi đến thiết bị đầu cuối
đã thuêfireddiff02021-10-262022-12-25425 ngày12021-11-112022-03-31140 ngàyTóm lược
Năm [5] phương pháp trừ ngày này sẽ cung cấp cho bạn đủ thông tin để chọn phương pháp tốt nhất cho các yêu cầu viết mã của bạn