Chọn cột python

Tiện ích Chọn cột được sử dụng để soạn miền dữ liệu của bạn theo cách thủ công. Người dùng có thể quyết định thuộc tính nào sẽ được sử dụng và cách thức. Màu cam phân biệt giữa thuộc tính thông thường, thuộc tính lớp (tùy chọn) và thuộc tính meta. Chẳng hạn, để xây dựng một mô hình phân loại, miền sẽ bao gồm một tập hợp các thuộc tính và một thuộc tính lớp rời rạc. Thuộc tính meta không được sử dụng trong mô hình hóa, nhưng một số tiện ích con có thể sử dụng chúng làm nhãn phiên bản

Các thuộc tính màu cam có một loại và là rời rạc, liên tục hoặc một chuỗi ký tự. Loại thuộc tính được đánh dấu bằng một biểu tượng xuất hiện trước tên của thuộc tính (D, C, S, tương ứng)

Chọn cột python

  1. Các thuộc tính dữ liệu còn sót lại sẽ không có trong tệp dữ liệu đầu ra

  2. Thuộc tính dữ liệu trong tệp dữ liệu mới

  3. Biến mục tiêu. Nếu không, tập dữ liệu mới sẽ không có biến mục tiêu

  4. Thuộc tính meta của tệp dữ liệu mới. Các thuộc tính này được bao gồm trong tập dữ liệu nhưng đối với hầu hết các phương pháp, không được xem xét trong phân tích

  5. Sản xuất một báo cáo

  6. Đặt lại thành phần miền thành thành phần của tệp dữ liệu đầu vào

  7. Tích chọn nếu bạn muốn tự động áp dụng các thay đổi của miền dữ liệu

  8. Áp dụng các thay đổi của miền dữ liệu và gửi tệp dữ liệu mới tới kênh đầu ra của tiện ích

ví dụ

Trong quy trình công việc bên dưới, dữ liệu Iris từ tiện ích Tệp được đưa vào tiện ích Chọn cột, trong đó chúng tôi chọn chỉ xuất hai . Chúng tôi xem cả tập dữ liệu gốc và tập dữ liệu có các cột đã chọn trong tiện ích Bảng dữ liệu .

Chọn cột python

Để sử dụng tiện ích phức tạp hơn, chúng tôi đã soạn một quy trình công việc để xác định lại vấn đề phân loại trong tập dữ liệu bệnh tim. Ban đầu, nhiệm vụ là dự đoán xem bệnh nhân có bị hẹp đường kính động mạch vành hay không. Chúng tôi đã thay đổi vấn đề thành phân loại giới tính, dựa trên tuổi tác, cơn đau ngực và mức cholesterol, đồng thời giữ đường kính thu hẹp một cách thông tin như một thuộc tính meta

Trong các bài viết trước về pandas, tôi đã giới thiệu các cách truy cập tự nhiên cho dataframe hay series, có thể nhận thấy rằng chúng rất tương đồng với cách truy cập mảng, danh sách hay từ điển

Trong phần này, tôi sẽ hướng dẫn các kỹ thuật lọc kỹ thuật để có thể chọn một phần dữ liệu trong Dataframe dựa trên nội dung của dữ liệu chứ không chỉ dựa vào chỉ mục hay nhãn như các bài trước

ở đâu()

Select the value from a Series with a Filter (véc tơ boolean) thường trả về một tập dữ liệu. Để đảm bảo rằng đầu ra của select có cùng dạng với data ban đầu, bạn có thể sử dụng phương thức trong Series và Dataframe. Ví dụ

>>> s = pd.Series([12,34,56,78],index = [1,2,3,4])

>>> s

1    12

2    34

3    56

4    78

dtype: int64

>>> s>50

1    False

2    False

3     True

4     True

dtype: bool

>>> s[s>50]

3    56

4    78

dtype: int64

>>> s.where(s>50)

1     NaN

2     NaN

3    56.0

4    78.0

dtype: float64

>>>

Chọn các giá trị từ một khung dữ liệu khi truyền vào một Bộ lọc (vector Boolean) bây giờ cũng không tồn tại dạng dữ liệu đầu vào. “where” được sử dụng trong ví dụ dưới đây cho kết quả tương đương

>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  102.502787 -68.034861  215.551919  -39.416507

1   89.068861  30.578270 -169.886261   32.943052

2   26.351777 -88.681893   42.678767   51.788262

3  -28.990230   8.767649   -5.079649  106.257066

4 -163.709170 -87.866018   43.412728  -22.622010

>>> df[df>0]

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>> df.where(df>0)

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>>

Tuy nhiên, trong trường hợp sử dụng “where”có một số tùy chọn đối số khác để thay thế các giá trị mà điều kiện là Sai, trong bản sao được trả về

>>> df.where(df>0,-df)

            A          B           C           D

0  102.502787  68.034861  215.551919   39.416507

1   89.068861  30.578270  169.886261   32.943052

2   26.351777  88.681893   42.678767   51.788262

3   28.990230   8.767649    5.079649  106.257066

4  163.709170  87.866018   43.412728   22.622010

>>>

Chú ý, tùy chọn inplace=True giúp chỉnh sửa tại chỗ dataframe đang truy vấn

truy vấn(expr, inplace=False, **kwargs)

Khung dữ liệu đối tượng có một truy vấn phương thức() cho phép chọn dữ liệu thông qua việc sử dụng một biểu thức

You can get the value of dataframe which the column b has the value nằm giữa các giá trị của cột a và cột c. Ví dụ sau đây sẽ trình bày 2 cách cho cùng một kết quả trả về. Cách sử dụng cú pháp giống như số thông thường, cách còn lại sử dụng theo cú pháp sql

>>> df = pd.DataFrame(np.random.randint(100, size=(10, 3)), columns=list('abc'))
>>> df
    a   b   c
0  51  91  35
1  57  12  91
2  40  64  16
3  30  36  28
4  11  69  89
5  96   7  72
6  66  20  44
7  85  16  29
8  16  12  21
9  80  48  91
>>> df[(df.a < df.b) & (df.b < df.c)]
    a   b   c
4  11  69  89
>>> print("cach lam tuong duong khi dung query")
cach lam tuong duong khi dung query
>>> df.query('a < b and b < c')
    a   b   c
4  11  69  89
>>>

Trường hợp sử dụng truy vấn() là khi bạn có một khung dữ liệu tập hợp có một tập con của các cột tên (hoặc các cấp chỉ mục /tên) chung. Bạn đã sử dụng cùng một truy vấn cho cả hai khung dữ liệu mà không cần phải chỉ định khung dữ liệu mà bạn quan tâm đến cuộc truy vấn. Ví dụ

>>> df = pd.DataFrame(np.random.randint(100,size = (5, 3)), columns=list('abc'))
>>> df1 = pd.DataFrame(np.random.randint(100,size=(8, 3)), columns=df.columns)
>>> expr = '0.0 <= a <= c <= 100'
>>> map(lambda frame: frame.query(expr), [df, df1])
[    a   b   c
3  21  66  63
6   1  17  62
7   7  50  65,     a   b   c
0  42  40  73
3  27  49  34
4  67  89  76
7  24  46  64]
>>>

Toán tử 'in' và 'not in'

Query() cũng hỗ trợ sử dụng toán tử so sánh đặc biệt trong Python “in” và “not in”, cung cấp một cú pháp rút gọn để gọi phương thức isin() của Series hoặc DataFrame

>>> df = pd.DataFrame({'a': list('aabbccddeeff'), 'b': list('aaaabbbbcccc'),'c': np.random.randint(5, size=12), 'd': np.random.randint(9, size=12)})
>>> df
    a  b  c  d
0   a  a  1  1
1   a  a  1  4
2   b  a  4  2
3   b  a  2  7
4   c  b  2  2
5   c  b  2  3
6   d  b  2  0
7   d  b  4  0
8   e  c  0  2
9   e  c  1  1
10  f  c  0  3
11  f  c  2  4
>>> df.query('a in b')
   a  b  c  d
0  a  a  1  1
1  a  a  1  4
2  b  a  4  2
3  b  a  2  7
4  c  b  2  2
5  c  b  2  3
>>>

Cách tương tự với ví dụ trên nhưng sử dụng isin()

>>> df[df.a.isin(df.b)]
   a  b  c  d
0  a  a  1  1
1  a  a  1  4
2  b  a  4  2
3  b  a  2  7
4  c  b  2  2
5  c  b  2  3
>>>

Cách dùng tương tự với “not in” được so sánh với ~isin()

>>> df.query('a not in b')
    a  b  c  d
6   d  b  2  0
7   d  b  4  0
8   e  c  0  2
9   e  c  1  1
10  f  c  0  3
11  f  c  2  4
>>> df[~df.a.isin(df.b)]
    a  b  c  d
6   d  b  2  0
7   d  b  4  0
8   e  c  0  2
9   e  c  1  1
10  f  c  0  3
11  f  c  2  4
>>>

Các bộ lọc có thể được kết hợp với nhau thông qua các thuật toán logic như &,. , ~ hay hoặc, và,. = … as in SQL. Cần lưu ý rằng mỗi bộ lọc con cần được đặt trong dấu ngoặc kép ()

Bạn có thể kết hợp “in” hoặc “not in” với các biểu thức khác nhau để truy vấn rất ngắn gọn

>>> df.query('a in b and c < d')
   a  b  c  d
1  a  a  1  4
3  b  a  2  7
5  c  b  2  3
>>>
>>> df[df.a.isin(df.b) & (df.c < df.d)]
   a  b  c  d
1  a  a  1  4
3  b  a  2  7
5  c  b  2  3
>>>

Khi sử dụng toán tử “==” hay”. =” với danh sách ta có kết quả tương đồng với toán tử “in” và “not in” ví dụ

>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  102.502787 -68.034861  215.551919  -39.416507

1   89.068861  30.578270 -169.886261   32.943052

2   26.351777 -88.681893   42.678767   51.788262

3  -28.990230   8.767649   -5.079649  106.257066

4 -163.709170 -87.866018   43.412728  -22.622010

>>> df[df>0]

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>> df.where(df>0)

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>>
0
>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  102.502787 -68.034861  215.551919  -39.416507

1   89.068861  30.578270 -169.886261   32.943052

2   26.351777 -88.681893   42.678767   51.788262

3  -28.990230   8.767649   -5.079649  106.257066

4 -163.709170 -87.866018   43.412728  -22.622010

>>> df[df>0]

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>> df.where(df>0)

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>>
1

Series, dataframe cũng cung cấp phương thức get() hoạt động kiểu từ điển và có thể giúp ta gán giá trị mặc định nếu không lấy được dữ liệu

>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  102.502787 -68.034861  215.551919  -39.416507

1   89.068861  30.578270 -169.886261   32.943052

2   26.351777 -88.681893   42.678767   51.788262

3  -28.990230   8.767649   -5.079649  106.257066

4 -163.709170 -87.866018   43.412728  -22.622010

>>> df[df>0]

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>> df.where(df>0)

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>>
2

chọn (chức năng, trục = 0)

Một cách khác để truy xuất từ ​​một đối tượng là với phương pháp chọn của Sê-ri, khung dữ liệu và Bảng điều khiển. Phương pháp này chỉ nên sử dụng khi không có cách nào trực tiếp. Chọn có một callable và đối số truyền vào của callable là đánh dấu các cột theo cột hoặc hàng boolean. Ví dụ

>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  102.502787 -68.034861  215.551919  -39.416507

1   89.068861  30.578270 -169.886261   32.943052

2   26.351777 -88.681893   42.678767   51.788262

3  -28.990230   8.767649   -5.079649  106.257066

4 -163.709170 -87.866018   43.412728  -22.622010

>>> df[df>0]

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>> df.where(df>0)

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>>
3____14

khóa (row_lables, col_labels)

Đôi khi bạn muốn trích xuất một tập hợp các giá trị cho một dãy các hàng và các cột, và tra cứu() cho phép điều này và trả về một mảng numpy của các giá trị tương ứng với mỗi cặp (hàng, cột). Ví dụ,

>>> df = pd.DataFrame(np.random.randn(5, 4)*100,columns = list("ABCD"))

>>> df

            A          B           C           D

0  102.502787 -68.034861  215.551919  -39.416507

1   89.068861  30.578270 -169.886261   32.943052

2   26.351777 -88.681893   42.678767   51.788262

3  -28.990230   8.767649   -5.079649  106.257066

4 -163.709170 -87.866018   43.412728  -22.622010

>>> df[df>0]

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>> df.where(df>0)

            A          B           C           D

0  102.502787        NaN  215.551919         NaN

1   89.068861  30.578270         NaN   32.943052

2   26.351777        NaN   42.678767   51.788262

3         NaN   8.767649         NaN  106.257066

4         NaN        NaN   43.412728         NaN

>>>
5

value 0. 87448836 chính là kết quả của cột 'B' ứng với hàng có chỉ số là 0, bạn có thể giải thích với các số khác

Kết luận

Có thể thấy Pandas hỗ trợ khá nhiều định dạng phương thức để truy xuất, lọc một tệp dữ liệu trong DataFrame hoặc sê-ri. Trong bài viết này, chúng tôi đã đề cập đến một số phương thức hoặc được sử dụng trong xử lý dữ liệu như Series. ở đâu()/Khung dữ liệu. ở đâu (), Khung dữ liệu. query() with the option inplace Hỗ trợ chỉnh sửa trên gốc dữ liệu chính, đồng thời lọc biểu thức của các hàm này đồng thời có thể sử dụng các thuật toán so sánh đặc biệt như 'in'/'not in' và các thuật toán

Ngoài ra, các bạn có thể tham khảo một số cách truy xuất khác có thể sử dụng như DataFrame. nhận (), Khung dữ liệu. tra cứu() hay DataFrame. tra cứu()