Lựa chọn và chỉ định có điều kiện với .loc trong Pandas
- warmsmiles81geomat
- Dec 3, 2020
- 3 min read
Giới thiệu nhanh về cách chọn tập hợp con và chỉnh sửa DataFrames

Có nhiều cách khác nhau để chọn dữ liệu trong Pandas, chúng ta sẽ xem xét cách chỉnh sửa DataFrames của bạn dựa trên các câu lệnh có điều kiện bằng phương thức .loc.
Nếu bạn đã làm việc với Pandas một thời gian, bạn có thể đã gặp phải thông báo “SettingwithCopyWarning” đáng sợ khi bạn chạy mã của mình. Thoạt nghe có vẻ đáng sợ (tin tôi đi, tôi đã từng ở đó), nhưng tất cả những gì nó nói với bạn là có thể bạn đang cố gán giá trị cho bản sao của đối tượng Pandas trong khi thực tế bạn muốn chỉnh sửa giá trị thực .
Đối với một số thao tác, bạn có thể khắc phục cảnh báo này chỉ bằng cách thêm tham số inplace = True vào bất kỳ hàm nào bạn đang chạy. Chúng ta sẽ sử dụng bộ dữ liệu giá cổ phiếu Tesla cũ từ Yahoo Finance. Để chiết xuất dữ liệu trên web chúng ta sử dụng hàm pd.read_html và df.sort_values

Sử dụng điều kiện với .loc trong Pandas
Nhận tất cả các hàng phù hợp với một câu lệnh điều kiện đơn giản
Trước tiên, chúng ta hãy cố gắng lấy tất cả các hàng trong DataFrame của bộ dữ liệu phù hợp với một điều kiện. Trong ví dụ này, tôi chỉ muốn lấy tất cả các hàng xảy ra sau một ngày nhất định
df1 = df.loc[df['Date'] > 'Feb 06, 2019']
Kết quả đầu ra là

.loc cho phép bạn thiết lập một điều kiện và kết quả sẽ là một DataFrame chỉ chứa các hàng phù hợp với điều kiện đó. Bây giờ chúng ta đã hiểu cú pháp cơ bản, hãy chuyển sang một ví dụ thú vị hơn một chút.
Lấy các cột cụ thể phù hợp với câu lệnh điều kiện
Trong trường hợp này, chúng tôi sẽ sử dụng câu lệnh điều kiện tương tự như trước đây để lọc ra các ngày cụ thể. Tuy nhiên, mục tiêu của chúng tôi lần này là chỉ chọn hai cột (Ngày và Mở) từ DataFrame ban đầu.
df2 = df.loc[df['Date'] > 'Feb 06, 2019', ['Date','Open']]
Khi đó ta có kết quả như sau

Như bạn có thể thấy, sau câu lệnh điều kiện .loc, chúng ta chỉ cần chuyển một danh sách các cột mà chúng ta muốn tìm thấy trong DataFrame ban đầu. DataFrame kết quả chỉ cung cấp cho chúng tôi các cột Ngày và Mở cho các hàng có giá trị Ngày lớn hơn ngày 6 tháng 2 năm 2019.
Sử dụng nhiều câu lệnh điều kiện để lọc một DataFrame
Nếu bạn có hai hoặc nhiều điều kiện mà bạn muốn sử dụng để lấy một tập hợp con dữ liệu rất cụ thể của mình, .loc cho phép bạn làm điều đó rất dễ dàng. Trong trường hợp của chúng ta, hãy lấy các hàng không chỉ xuất hiện sau một ngày cụ thể mà còn có Giá trị mở lớn hơn giá trị cụ thể.
df3 = df.loc[(df['Date'] > 'Feb 06, 2019') & (df['Open'] > 62), ['Date', 'Open']]
Kết quả là

Như bạn có thể thấy, chúng ta chỉ cần thêm một điều kiện khác bằng cách bao gồm dấu & để cho biết rằng chúng tôi muốn cả hai điều kiện được đáp ứng (lưu ý rằng dấu | cũng sẽ hoạt động cho “hoặc”). Chúng tôi cũng đã đặt mỗi câu lệnh điều kiện trong dấu ngoặc đơn để có cái nhìn rõ ràng. Kết quả là một tập con rất nhỏ của DataFrame ban đầu chỉ có các hàng đáp ứng hai điều kiện của chúng tôi.
Chỉnh sửa DataFrame dựa trên nhiều câu lệnh điều kiện
Trong trường hợp này, chúng tôi sẽ tạo cột "Đáng chú ý" mới, cột này sẽ bao gồm các hàng có Số lượng rất cao hoặc Mức tăng dương
remarkable_filter = (df['Volume'] > 30000000) | (df['Gain'] > 0)
df4 = df.copy()
df4['Remarkable'] = ''
df4.loc[remarkable_filter, ['Remarkable']] = True
df4.loc[~remarkable_filter, ['Remarkable']] = False

Để rõ ràng, chúng tôi đặt các câu lệnh điều kiện của chúng tôi trong một biến riêng biệt, được sử dụng sau này trong .loc. Sau đó, chúng tôi chỉ định True cho cột Remarkable cho tất cả các hàng đáp ứng các câu lệnh điều kiện của chúng tôi. Chúng tôi sử dụng ký hiệu ~ để tìm tất cả các hàng không đáp ứng câu lệnh điều kiện của chúng tôi và sau đó chỉ định Sai cho cột Đáng chú ý cho các hàng đó.
Chúc các bạn làm thành công!
Comments