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]
3
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: object print[df.dtypes]
4 và
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: objectprint[df.dtypes]
3
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: object- phương pháp
print[df.dtypes]
6
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: object - và phương pháp
print[df.dtypes]
0
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: object
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
3print[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
6Tù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
7import pandas as pd0
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á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 pd01 sẽ trả về một vectơ boolean chứa các giá trị
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
import pandas as pd02 cho các hàng thỏa mãn phạm vi đã chỉ định và
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
import pandas as pd03 nếu không
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
import pandas as pd7
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
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 pd04 để 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
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
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: object
3import pandas as pd9
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
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 pd06 bằng cách sử dụng biểu thức giống như SQL như minh họa bên dưới
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
print[df.dtypes]
colA int64
colB object
colC datetime64[ns]
colD datetime64[ns]
colE bool
dtype: object
1Suy 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 pd09 đượ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
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
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