Hướng dẫn can i query a dataframe in python? - tôi có thể truy vấn một khung dữ liệu trong python không?

DataFrame.Query (expr, *, inplace = false, ** kwargs) [nguồn]#query(expr, *, inplace=False, **kwargs)[source]#

Truy vấn các cột của một khung dữ liệu với biểu thức boolean.

Tham số exprstrexprstr

Chuỗi truy vấn để đánh giá.

Bạn có thể tham khảo các biến trong môi trường bằng cách tiền tố chúng với ký tự ‘@@như @a + b.

Bạn có thể tham khảo các tên cột không phải là tên biến Python hợp lệ bằng cách xung quanh chúng trong Backticks. Do đó, tên cột chứa khoảng trắng hoặc dấu câu (bên cạnh dấu gạch dưới) hoặc bắt đầu bằng các chữ số phải được bao quanh bởi các backticks. . Các tên cột là các từ khóa Python (như danh sách của Hồi giáo, đối với các trò chơi, nhập khẩu, v.v.).

Ví dụ: nếu một trong các cột của bạn được gọi là a a và bạn muốn tổng hợp nó với b, truy vấn của bạn phải là `a a` + b.

Mới trong phiên bản 0.25.0: Trích dẫn Backtick được giới thiệu.Backtick quoting introduced.

Mới trong phiên bản 1.0.0: Mở rộng chức năng của trích dẫn backtick cho nhiều hơn chỉ là không gian.Expanding functionality of backtick quoting for more than only spaces.

InplaceBoolbool

Có nên sửa đổi DataFrame thay vì tạo một cái mới.

**kwargs

Xem tài liệu cho eval() để biết chi tiết đầy đủ về các đối số từ khóa được chấp nhận bởi

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
0.

ReturnSdatAframe hoặc không có

DataFrame kết quả từ biểu thức truy vấn được cung cấp hoặc không có nếu

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
1.

Xem thêm

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
2

Đánh giá một chuỗi mô tả các hoạt động trên các cột DataFrame.

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
3

Đánh giá một chuỗi mô tả các hoạt động trên các cột DataFrame.

Ghi chú

Kết quả của việc đánh giá biểu thức này lần đầu tiên được chuyển đến

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
4 và nếu điều đó không thành công do khóa đa chiều (ví dụ: khung dữ liệu) thì kết quả sẽ được chuyển sang
>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
5.

Phương pháp này sử dụng hàm eval() cấp cao nhất để đánh giá truy vấn được truyền.

Phương pháp

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
7 sử dụng cú pháp Python được sửa đổi một chút theo mặc định. Ví dụ, các toán tử
>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
8 và
>>> df[df.A > df.B]
   A  B  C C
4  5  2    6
9 (BitWise) có quyền ưu tiên của anh em họ boolean của họ,
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
0 và
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
1. Đây là Python có hiệu lực về mặt cú pháp, tuy nhiên ngữ nghĩa là khác nhau.

Bạn có thể thay đổi ngữ nghĩa của biểu thức bằng cách truyền đối số từ khóa

>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
2. Điều này thực thi cùng một ngữ nghĩa như đánh giá trong không gian Python. Tương tự như vậy, bạn có thể vượt qua
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
3 để đánh giá một biểu thức bằng cách sử dụng chính Python làm phụ trợ. Điều này không được khuyến khích vì nó không hiệu quả so với việc sử dụng
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
4 làm động cơ.

Các thuộc tính

>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
5 và
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
6 của thể hiện
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
7 được đặt trong không gian tên truy vấn theo mặc định, cho phép bạn xử lý cả hai chỉ mục và cột của khung như một cột trong khung. Định danh
>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
8 được sử dụng cho chỉ mục khung; Bạn cũng có thể sử dụng tên của chỉ mục để xác định nó trong một truy vấn. Xin lưu ý rằng các từ khóa Python có thể không được sử dụng làm định danh.

Để biết thêm chi tiết và ví dụ, hãy xem tài liệu

>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10
9 trong lập chỉ mục.indexing.

Backtick trích dẫn các biến

Backtick được trích dẫn các biến được phân tích cú pháp là mã python theo nghĩa đen và được chuyển đổi nội bộ thành một định danh hợp lệ của Python. Điều này có thể dẫn đến các vấn đề sau đây.

Trong quá trình phân tích cú pháp, một số ký tự không được phép bên trong chuỗi được trích dẫn backtick được thay thế bằng các chuỗi được cho phép làm định danh Python. Những nhân vật này bao gồm tất cả các nhà khai thác trong Python, nhân vật không gian, dấu hỏi, dấu chấm than, dấu hiệu đô la và dấu hiệu đồng euro. Đối với các ký tự khác nằm ngoài phạm vi ASCII (U+0001..U+007F) và các ký tự không được chỉ định thêm trong PEP 3131, trình phân tích cú pháp truy vấn sẽ gây ra lỗi. Điều này không bao gồm khoảng trắng khác với ký tự không gian, nhưng cũng có hashtag (như nó được sử dụng cho các bình luận) và bản thân backtick (Backtick cũng không thể thoát ra được).

Trong một trường hợp đặc biệt, các trích dẫn tạo ra một cặp xung quanh một backtick có thể gây nhầm lẫn cho trình phân tích cú pháp. Ví dụ,

>>> df[df.B == df['C C']]
   A   B  C C
0  1  10   10
0 sẽ gây ra lỗi, vì nó tạo thành một chuỗi được trích dẫn (
>>> df[df.B == df['C C']]
   A   B  C C
0  1  10   10
1) với một backtick bên trong.

Xem thêm Tài liệu Python về Phân tích từ vựng (https://docs.python.org/3/reference/lexical_analysis.html) kết hợp với mã nguồn trong

>>> df[df.B == df['C C']]
   A   B  C C
0  1  10   10
2.

Ví dụ

>>> df = pd.DataFrame({'A': range(1, 6),
...                    'B': range(10, 0, -2),
...                    'C C': range(10, 5, -1)})
>>> df
   A   B  C C
0  1  10   10
1  2   8    9
2  3   6    8
3  4   4    7
4  5   2    6
>>> df.query('A > B')
   A  B  C C
4  5  2    6

Biểu thức trước đó tương đương với

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6

Đối với các cột có khoảng trắng trong tên của họ, bạn có thể sử dụng trích dẫn Backtick.

>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10

Biểu thức trước đó tương đương với

>>> df[df.B == df['C C']]
   A   B  C C
0  1  10   10

Chúng ta có thể cắt DataFrame trong Python không?

Cắt một dataFrame trong gấu trúc bao gồm các bước sau: Đảm bảo Python được cài đặt (hoặc cài đặt ActivePython) Nhập bộ dữ liệu.Tạo một DataFrame.Cắt lát dữ liệu. Ensure Python is installed (or install ActivePython) Import a dataset. Create a DataFrame. Slice the DataFrame.

Truy vấn có nhanh hơn LỘC không?

Hàm truy vấn hiệu quả hiệu quả hơn hàm LỘC.DF2: 2K Bản ghi x 6 cột.Hàm LoC hiệu quả hiệu quả hơn nhiều so với hàm truy vấn.. DF2: 2K records x 6 columns. The loc function seams much more efficient than the query function.