Cách áp dụng điều kiện vào Ngày trong Python

Datetime là kiểu dữ liệu phổ biến trong các dự án khoa học dữ liệu. Thông thường, bạn sẽ làm việc với nó và gặp vấn đề. Tôi nhận thấy Pandas là một thư viện tuyệt vời chứa các khả năng và tính năng phong phú để làm việc với ngày và giờ

Trong bài viết này, chúng tôi sẽ đề cập đến các vấn đề về ngày giờ phổ biến sau đây và sẽ giúp bạn bắt đầu phân tích dữ liệu

  1. Chuyển chuỗi thành datetime
  2. Lắp ráp một datetime từ nhiều cột
  3. Nhận năm, tháng và ngày
  4. Nhận tuần trong năm, ngày trong tuần và năm nhuận
  5. Lấy tuổi từ ngày sinh
  6. Cải thiện hiệu suất bằng cách đặt cột ngày làm chỉ mục
  7. Chọn dữ liệu với một năm cụ thể và thực hiện tổng hợp
  8. Chọn dữ liệu với một tháng cụ thể và một ngày cụ thể trong tháng
  9. Chọn dữ liệu giữa hai ngày
  10. Xử lý các giá trị bị thiếu

Vui lòng kiểm tra repo Github của tôi để biết mã nguồn

1. Chuyển chuỗi thành datetime

Pandas có chức năng tích hợp có tên là

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
8 có thể được sử dụng để chuyển đổi chuỗi thành ngày giờ. Hãy xem xét một số ví dụ

Với đối số mặc định

Pandas

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
8 có thể phân tích bất kỳ chuỗi ngày hợp lệ nào thành datetime mà không cần thêm bất kỳ đối số nào. Ví dụ

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date']]
df

Định dạng ngày đầu tiên

Theo mặc định,

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
8 sẽ phân tích cú pháp chuỗi có định dạng tháng đầu tiên [MM/DD, MM DD hoặc MM-DD] và cách sắp xếp này tương đối độc đáo ở Hoa Kỳ

Ở hầu hết các nơi trên thế giới, ngày được viết trước [DD/MM, DD MM hoặc DD-MM]. Nếu bạn muốn Pandas xem xét ngày đầu tiên thay vì tháng, bạn có thể đặt đối số

# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
1 thành
# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
2

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df

Ngoài ra, bạn chuyển một định dạng tùy chỉnh cho đối số

# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
3

định dạng tùy chỉnh

Theo mặc định, các chuỗi được phân tích cú pháp bằng trình phân tích cú pháp tích hợp sẵn của Pandas từ

# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
4. Đôi khi, chuỗi của bạn có thể ở định dạng tùy chỉnh, ví dụ: YYYY-DD-MM HH. MM. SS. Pandas
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
8 có một đối số gọi là
# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
3 cho phép bạn chuyển một định dạng tùy chỉnh

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df

Tăng tốc độ phân tích cú pháp với
# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
7

Việc vượt qua

# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop
8 thường có thể tăng tốc độ phân tích cú pháp nếu định dạng đó không chính xác là định dạng ISO8601 mà ở định dạng thông thường. Theo [1], 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

# Make up 3000 rows
df = pd.DataFrame[{'date': ['3/11/2000', '3/12/2000', '3/13/2000'] * 1000 }]
%timeit pd.to_datetime[df['date'], infer_datetime_format=True]
100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime[df['date'], infer_datetime_format=False]
1 loop, best of 3: 471 ms per loop

Xử lý lỗi phân tích cú pháp

Bạn sẽ kết thúc với TypeError nếu chuỗi ngày không đáp ứng định dạng dấu thời gian

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
5

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
8 có một đối số gọi là
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
50 cho phép bạn bỏ qua lỗi hoặc buộc một giá trị không hợp lệ thành
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
51

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
9

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date']]
df
0

Ngoài ra, nếu bạn muốn phân tích cột ngày tháng khi đọc dữ liệu từ tệp CSV, vui lòng xem bài viết sau

4 thủ thuật bạn nên biết để phân tích cột ngày với Pandas read_csv[]

Một số thủ thuật Pandas hữu ích nhất

hướng tới khoa học dữ liệu. com

2. Lắp ráp một datetime từ nhiều cột

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
8 cũng có thể được sử dụng để tập hợp một ngày giờ từ nhiều cột. Các khóa [nhãn cột] 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[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date']]
df
2

3. Nhận năm, tháng và ngày

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
53,
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
54 và
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
55 là các thuộc tính sẵn có để lấy năm, tháng và ngày từ đối tượng ngày giờ của Pandas

Trước tiên, hãy tạo một DataFrame giả và phân tích Ngày thành ngày giờ

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date']]
df
6

Và để có được năm, tháng và ngày

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date']]
df
7

4. Nhận tuần trong năm, ngày trong tuần và năm nhuận

Tương tự,

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
56,
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
57 và
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
58 là các thuộc tính sẵn có để lấy tuần trong năm, ngày trong tuần và năm nhuận

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
0

Lưu ý rằng thuộc tính Pandas

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
59 trả về ngày trong tuần và giả định rằng tuần bắt đầu vào Thứ Hai, được biểu thị bằng 0 và kết thúc vào Chủ nhật, được biểu thị bằng 6. Để thay thế số bằng tên đầy đủ, chúng ta có thể tạo ánh xạ và chuyển nó tới
df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
90

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
1

5. Lấy tuổi từ ngày sinh

Giải pháp đơn giản nhất để lấy tuổi là trừ đi năm

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
2

Tuy nhiên, điều này không chính xác vì mọi người có thể không có sinh nhật trong năm nay. Một giải pháp chính xác hơn sẽ là xem xét ngày sinh nhật

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
3

6. Cải thiện hiệu suất bằng cách đặt cột ngày làm chỉ mục

Một giải pháp phổ biến để chọn dữ liệu theo ngày là sử dụng maks boolean. Ví dụ

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
4

Giải pháp này thường yêu cầu ________ 191, ________ 192 và cột ngày ở định dạng ngày giờ. Và trên thực tế, giải pháp này chậm khi bạn thực hiện nhiều lựa chọn theo ngày trong một tập dữ liệu lớn

Nếu bạn định thực hiện nhiều lựa chọn theo ngày, thì sẽ nhanh hơn nếu đặt cột ngày làm chỉ mục trước để bạn tận dụng tối ưu hóa tích hợp sẵn của Pandas. Sau đó, bạn có thể chọn dữ liệu theo ngày bằng cách sử dụng

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
93. Hãy xem tập dữ liệu ví dụ city_sales. csv, có 1.795.144 hàng dữ liệu

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
5

Để đặt cột ngày làm chỉ mục

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
6

7. Chọn dữ liệu với một năm cụ thể và thực hiện tổng hợp

Giả sử chúng tôi muốn chọn tất cả dữ liệu trong năm 2018

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
7

Và để thực hiện tổng hợp trên vùng chọn chẳng hạn

Lấy tổng số năm 2018

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
8

Lấy tổng số cho mỗi thành phố vào năm 2018

df = pd.DataFrame[{'date': ['3/10/2000', '3/11/2000', '3/12/2000'],
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], dayfirst=True]
df
9

8. Chọn dữ liệu với một tháng cụ thể và một ngày cụ thể trong tháng

Để chọn dữ liệu với một tháng cụ thể, ví dụ: tháng 5 năm 2018

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
0

Tương tự, để chọn dữ liệu có ngày cụ thể trong tháng, ví dụ 1st May 2018

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
1

9 Chọn dữ liệu giữa hai ngày

Để chọn dữ liệu giữa hai ngày, bạn có thể sử dụng

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
93 Ví dụ

Chọn dữ liệu giữa năm 2016 và 2018

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
2

Chọn dữ liệu trong khoảng thời gian từ 10 đến 11 giờ ngày 02/05/2018

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
3

Chọn dữ liệu giữa 10. 30 và 10. 45 vào ngày 2 tháng 5 năm 2018

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
4

Và để chọn dữ liệu giữa thời gian, chúng ta nên sử dụng

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
95, ví dụ: 10. 30 và 10. 45

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
510 Xử lý các giá trị bị thiếu

Chúng ta thường cần tính toán các số liệu thống kê về cửa sổ, chẳng hạn như giá trị trung bình luân phiên hoặc tổng luân phiên

Hãy tính tổng luân phiên trong 3 khoảng thời gian cửa sổ và sau đó xem xét 5 hàng trên cùng

df = pd.DataFrame[{'date': ['2016-6-10 20:30:0', 
'2016-7-1 19:45:30',
'2013-10-12 4:5:1']
,
'value': [2, 3, 4]}]
df['date'] = pd.to_datetime[df['date'], format="%Y-%d-%m %H:%M:%S"]
df
6

Chúng ta có thể thấy rằng nó chỉ bắt đầu có giá trị hợp lệ khi có 3 khoảng thời gian để nhìn lại. Một giải pháp để xử lý vấn đề này là chèn lấp dữ liệu

Làm cách nào để lọc dựa trên ngày trong gấu trúc?

Lọc hàng theo ngày trong pandas DataFrame . Nếu ngày không thuộc loại datetime64, thì phương pháp này không hoạt động. sử dụng df. dtypes để lấy kiểu dữ liệu của tất cả các cột. df[[df['Date'] > "2020-09-20"] & [df['Date'] < "2021-11-17"]] . If dates are not in datetime64 type, then this approach doesn't work. Use df. dtypes to get the data type of all columns.

Làm cách nào để kiểm tra điều kiện ngày trong gấu trúc?

Sử dụng DateTimeIndex[dt] để truy cập các thuộc tính ngày giờ riêng biệt như năm, tháng, ngày, ngày trong tuần, giờ, phút, giây, micro giây, v.v. làm điều kiện trong hàm loc[] như sau. Ghi chú. Các giá trị ngày phải ở định dạng datetime64.

Làm cách nào để lấy ngày từ DateTime bằng Python?

Đối với điều này, chúng tôi sẽ sử dụng phương thức strptime[] và mô-đun Pandas . Phương thức này được sử dụng để tạo một đối tượng DateTime từ một chuỗi. Sau đó, chúng tôi sẽ trích xuất ngày từ đối tượng DateTime bằng cách sử dụng hàm date[] và dt. ngày từ Pandas trong Python.

Chủ Đề