Lấy dữ liệu giữa hai ngày trong python

Khi làm việc với dữ liệu chuỗi thời gian hoặc bất kỳ tập dữ liệu nào liên quan đến ngày [thời gian], chúng tôi thường có thể cần lọc ra các hàng dựa trên một số điều kiện cụ thể. Trong hướng dẫn ngắn ngày hôm nay, chúng tôi sẽ giới thiệu cách chọn các hàng nằm giữa một phạm vi ngày cụ thể

Cụ thể hơn, chúng tôi sẽ giới thiệu cách thực hiện bằng cách sử dụng

  • mặt nạ boolean và
    print[df.dtypes]
    colA int64
    colB object
    colC datetime64[ns]
    colD datetime64[ns]

    colE bool
    dtype: object
    3
  • print[df.dtypes]
    colA int64
    colB object
    colC datetime64[ns]
    colD datetime64[ns]

    colE bool
    dtype: object
    4 và
    print[df.dtypes]
    colA int64
    colB object
    colC datetime64[ns]
    colD datetime64[ns]

    colE bool
    dtype: object
    3
  • phương pháp
    print[df.dtypes]
    colA int64
    colB object
    colC datetime64[ns]
    colD datetime64[ns]

    colE bool
    dtype: object
    6
  • và phương pháp
    print[df.dtypes]
    colA int64
    colB object
    colC datetime64[ns]
    colD datetime64[ns]

    colE bool
    dtype: object
    0

Trước tiên, hãy tạo một DataFrame mẫu mà chúng ta sẽ sử dụng trong suốt hướng dẫn này để minh họa một số khái niệm

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False

Lưu ý rằng cột

print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
1 và
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
2 chứa các đối tượng
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
3

print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object

Chọn hàng giữa hai cột ngày

Bây giờ, hãy giả sử rằng chúng tôi muốn lọc DataFrame mẫu của mình để nó chỉ chứa các hàng có ngày dưới cột

print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
1 nằm trong khoảng từ
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
5 đến
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
6

Tùy chọn đầu tiên bạn có là sử dụng mặt nạ boolean cùng với thuộc tính

print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
7

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
0

Lưu ý rằng cách trên sẽ hoạt động với hầu hết mọi cột ngày thuộc loại _______ 08, _______ 09 và ________ 100

Ngoài ra, bạn có thể sử dụng phương pháp

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
01 sẽ trả về một vectơ boolean chứa các giá trị
import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
02 cho các hàng thỏa mãn phạm vi đã chỉ định và
import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
03 nếu không

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
7

Chọn các hàng giữa hai ngày bằng Chỉ mục

Nếu bạn dự định áp dụng các bộ lọc ngày thường xuyên, có thể thông minh hơn là thay đổi chỉ mục của khung dữ liệu và đặt nó thành cột ngày. Sau đó, bạn có thể sử dụng

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
04 để chọn các hàng có chỉ mục nằm trong phạm vi đã chỉ định bằng cách sử dụng thuộc tính
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
3

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
9

Truy vấn cột ngày

Cuối cùng, một tùy chọn khác là sử dụng phương pháp

import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
06 bằng cách sử dụng biểu thức giống như SQL như minh họa bên dưới

print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
1

Suy nghĩ cuối cùng

Trong hướng dẫn ngắn hôm nay, chúng tôi đã giới thiệu cách lọc DataFrames của gấu trúc trên một cột ngày và chọn các hàng giữa một phạm vi ngày cụ thể. Cụ thể hơn, chúng ta đã thảo luận cách thực hiện việc này bằng cách sử dụng mặt nạ boolean và

print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
4 với thuộc tính
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]

colE bool
dtype: object
3 hoặc một phương thức gấu trúc đặc biệt có tên là
import pandas as pd
df = pd.DataFrame[
[
[1, 'A', '28-02-2020', '30-01-2021', False],
[2, 'B', '27-01-2019', '21-02-2020', True],
[3, 'A', '05-02-2021', '01-01-2022', False],
[4, 'D', '04-01-2019', '02-02-2021', False],
[5, 'B', '15-12-2021', '25-12-2021', False],
[6, 'C', '16-03-2021', '10-01-2022', True],
[7, 'D', '21-05-2018', '01-03-2020', True],
[8, 'A', '21-05-2019', '20-03-2021', False],
],
columns=['colA', 'colB', 'colC', 'colD', 'colE']
]

df[['colC', 'colD']] = df[['colC', 'colD']].apply[pd.to_datetime]
print[df]
colA colB colC colD colE
0 1 A 2020-02-28 2021-01-30 False
1 2 B 2019-01-27 2020-02-21 True
2 3 A 2021-05-02 2022-01-01 False
3 4 D 2019-04-01 2021-02-02 False
4 5 B 2021-12-15 2021-12-25 False
5 6 C 2021-03-16 2022-10-01 True
6 7 D 2018-05-21 2020-01-03 True
7 8 A 2019-05-21 2021-03-20 False
09 được thiết kế để thực hiện chính xác điều này. Cuối cùng, chúng tôi cũng giới thiệu cách nhận được kết quả tương đương bằng cách truy vấn DataFrame bằng cách sử dụng biểu thức giống như SQL

Trở thành thành viên và đọc mọi câu chuyện trên Medium. Phí thành viên của bạn hỗ trợ trực tiếp cho tôi và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có toàn quyền truy cập vào mọi câu chuyện trên Phương tiện

Chủ Đề