Suy nghĩ điều này sẽ thẳng về phía trước nhưng có một số vấn đề theo dõi một cách thanh lịch để tìm kiếm tất cả các cột trong một khung dữ liệu cùng một lúc. Về cơ bản, làm cách nào để áp dụng df['col1'].str.contains('^')
cho toàn bộ khung dữ liệu cùng một lúc và lọc xuống bất kỳ hàng nào có bản ghi chứa kết quả phù hợp?Tìm kiếm chuỗi trong tất cả các cột dữ liệu Pandas DataFrame và lọc
Trả lời
Phương thức Series.str.contains
hy vọng mẫu regex (theo mặc định), không phải là chuỗi ký tự bằng chữ. Do đó str.contains("^")
khớp với đầu chuỗi bất kỳ. Vì mọi chuỗi đều có điểm bắt đầu, mọi thứ đều phù hợp. Thay vào đó, hãy sử dụng str.contains("\^")
để khớp với ký tự ^
theo nghĩa đen.
Để kiểm tra tất cả các cột, bạn có thể sử dụng for col in df
để lặp qua các tên cột, và sau đó gọi str.contains
trên mỗi cột:
mask = np.column_stack([df[col].str.contains(r"\^", na=False) for col in df])
df.loc[mask.any(axis=1)]
Ngoài ra, bạn có thể vượt qua regex=False
-str.contains
để làm cho thử nghiệm sử dụng Python in
nhà điều hành; nhưng (nói chung) sử dụng regex nhanh hơn.
Hey @unutbu, câu hỏi dành cho bạn . Tại sao bạn sử dụng 'np.column_stack 'khi bạn có thể sử dụng' pd.DataFrame (...). Transpose() '? – propjk007
Khi 'mặt nạ' là một mảng Boolean NumPy,' df.loc [mask] ' các hàng đã chọn trong đó' mặt nạ' là Đúng. Nếu 'mask' là một DataFrame, tuy nhiên, sau đó ' df.loc [mask] 'chọn các hàng từ' df' có giá trị * index * khớp với giá trị chỉ mục trong 'mặt nạ' tương ứng với giá trị True. Sự liên kết này của chỉ số là tuyệt vời khi bạn cần, nhưng làm chậm hiệu suất khi bạn không. Vì vậy, trong ngắn hạn, nếu bạn không cần chỉ mục, hãy sử dụng một mảng NumPy thay vì một DataFrame. Ngoài ra, việc tạo DataFrame chậm hơn đáng kể so với việc tạo mảng NumPy để có không có lợi thế khi sử dụng 'pd.DataFrame ([...]). T' tại đây. – unutbu
Tôi không nghĩ đến ảnh hưởng hiệu suất của phương pháp DataFrame. Nó đã được, nhiều hơn hoặc ít hơn, về việc thêm một Module (numpy) và nghĩ rằng việc sử dụng các chức năng trong cùng một thư viện (gấu trúc) sẽ tốt hơn. Tôi thấy phương pháp của bạn trong thời gian dài là tốt hơn. Cảm ơn @unutbu! – propjk007
Hãy thử với:
df.apply(lambda row: row.astype(str).str.contains('TEST').any(), axis=1)
- 1. Kết nối cột dữ liệu Pandas DataFrame
- 2. pandas Python: chọn các cột có tất cả các mục 0 trong dataframe
- 3. Pandas DataFrame: thay thế tất cả các giá trị trong một cột, dựa trên điều kiện
- 4. Lọc tất cả các hàng với NAT trong một cột trong Dataframe python
- 5. Pandas MultiIndex: Chia tất cả các cột của một cột
- 6. Tìm trung bình của mỗi ba cột trong Pandas dataframe
- 7. Dữ liệu đầu ra từ tất cả các cột trong một khung dữ liệu trong gấu trúc
- 8. Pandas DataFrame: áp dụng chức năng để tất cả các cột
- 9. Python Pandas suy ra các kiểu dữ liệu cột
- 10. Tìm kiếm tất cả các bảng, tất cả các cột cho một giá trị cụ thể SQL Server
- 11. Làm cách nào để bạn tính toán mối tương quan giữa tất cả các cột trong một DataFrame và tất cả các cột trong một DataFrame khác?
- 12. Tổng hợp tất cả các cột bằng tìm kiếm tên ký tự đại diện bằng Python Pandas
- 13. Pandas: Tạo cột tổng hợp trong DataFrame
- 14. Cách in tất cả các cột trong bộ dữ liệu
- 15. Tạo Dataframe trống trong Pandas chỉ định các loại cột
- 16. Rẽ Pandas DataFrame các chuỗi vào histogram
- 17. Tự động hoàn tất với dữ liệu tìm kiếm jquery
- 18. Tổng hợp các giá trị cột trong Pandas DataFrame
- 19. Đang tải tập dữ liệu về SKLearn vào Pandas DataFrame
- 20. Kết hợp các cột trong một khung dữ liệu Pandas vào một cột danh sách trong một DataFrame
- 21. Sắp xếp dữ liệu đọc từ Excel sang Pandas DataFrame
- 22. MySql Chọn tất cả dữ liệu từ cột và đếm
- 23. Làm thế nào để thay thế tất cả giá trị trong tất cả các cột trong một dataframe Pandas với điều kiện
- 24. Pandas chia DataFrame theo giá trị cột
- 25. Tìm kiếm dữ liệu JQuery trong đầu vào và chọn
- 26. pandas dataframe cột mở rộng với sklearn
- 27. Lọc các khung dữ liệu một cột
- 28. Làm cách nào để lọc ra các hàng của một khung dữ liệu pandas python từ một khung dữ liệu khác bằng cách so sánh các cột?
- 29. Python Pandas: DataFrame bộ lọc giá trị âm
- 30. Slice Pandas DataFrame by Row
Bạn muốn tìm kiếm toàn bộ dataframe chứ không phải chỉ là một cột cụ thể? – EdChum
Phương thức 'str.contains' chỉ có giá trị cho Series vì vậy bạn phải làm một cái gì đó như' cho col trong df: df [col] .str.contains ('^') ' – EdChum