Tôi dường như không thể nhận được một kiểm tra DTYPE đơn giản làm việc với các phân loại được cải tiến của Pandas trong V0.15+. Về cơ bản tôi chỉ muốn một cái gì đó như
df.cat_column.dtype
Out[20]: category
4.import pandas as pd
import numpy as np
import random
df = pd.DataFrame[{
'x': np.linspace[0, 50, 6],
'y': np.linspace[0, 20, 6],
'cat_column': random.sample['abcdef', 6]
}]
df['cat_column'] = pd.Categorical[df2['cat_column']]
Chúng ta có thể thấy rằng
df.cat_column.dtype
Out[20]: category
5 cho cột phân loại là 'danh mục':df.cat_column.dtype
Out[20]: category
Và thông thường chúng ta có thể thực hiện kiểm tra DTYPE bằng cách so sánh với tên của DTYPE:
df.x.dtype == 'float64'
Out[21]: True
Nhưng điều này dường như không hoạt động khi cố gắng kiểm tra xem cột
df.cat_column.dtype
Out[20]: category
6 có phân loại không:df.x.dtype == 'category'
---------------------------------------------------------------------------
TypeError Traceback [most recent call last]
in []
----> 1 df.x.dtype == 'category'
TypeError: data type "category" not understood
Có cách nào để thực hiện các loại séc này trong Pandas V0.15+không?
Đã hỏi ngày 14 tháng 11 năm 2014 lúc 7:21Nov 14, 2014 at 7:21
MariusmariusMarius
56.4K15 Huy hiệu vàng105 Huy hiệu bạc102 Huy hiệu đồng15 gold badges105 silver badges102 bronze badges
4
Thay vào đó, sử dụng thuộc tính
df.cat_column.dtype
Out[20]: category
7 để so sánh, nó phải luôn hoạt động vì nó chỉ là một chuỗi:>>> import numpy as np
>>> arr = np.array[[1, 2, 3, 4]]
>>> arr.dtype.name
'int64'
>>> import pandas as pd
>>> cat = pd.Categorical[['a', 'b', 'c']]
>>> cat.dtype.name
'category'
Vì vậy, để tổng hợp, bạn có thể kết thúc với một chức năng đơn giản, đơn giản:
def is_categorical[array_like]:
return array_like.dtype.name == 'category'
Đã trả lời ngày 14 tháng 11 năm 2014 lúc 8:32Nov 14, 2014 at 8:32
Jeff Tratnerjeff TratnerJeff Tratner
15.6K4 Huy hiệu vàng45 Huy hiệu bạc66 Huy hiệu Đồng4 gold badges45 silver badges66 bronze badges
Đầu tiên, biểu diễn chuỗi của DTYPE là
df.cat_column.dtype
Out[20]: category
8 chứ không phải df.cat_column.dtype
Out[20]: category
9, vì vậy điều này hoạt động:In [41]: df.cat_column.dtype == 'category'
Out[41]: True
Nhưng thực sự, như bạn nhận thấy, so sánh này mang lại một
df.x.dtype == 'float64'
Out[21]: True
0 cho các DTYPE khác, vì vậy bạn sẽ phải bọc nó với một khối df.x.dtype == 'float64'
Out[21]: True
1.Các cách khác để kiểm tra bằng Pandas Internals:
In [42]: isinstance[df.cat_column.dtype, pd.api.types.CategoricalDtype]
Out[42]: True
In [43]: pd.api.types.is_categorical_dtype[df.cat_column]
Out[43]: True
Đối với các cột không phân loại, các câu lệnh đó sẽ trả về
df.x.dtype == 'float64'
Out[21]: True
2 thay vì gây ra lỗi. Ví dụ:In [44]: pd.api.types.is_categorical_dtype[df.x]
Out[44]: False
Đối với phiên bản cũ hơn của
df.x.dtype == 'float64'
Out[21]: True
3, hãy thay thế df.x.dtype == 'float64'
Out[21]: True
4 trong đoạn trích trên bằng df.x.dtype == 'float64'
Out[21]: True
5.
MOOT
2.0852 Huy hiệu vàng16 Huy hiệu bạc14 Huy hiệu đồng2 gold badges16 silver badges14 bronze badges
Đã trả lời ngày 14 tháng 11 năm 2014 lúc 7:52Nov 14, 2014 at 7:52
Jorisjorisjoris
127K35 Huy hiệu vàng241 Huy hiệu bạc201 Huy hiệu đồng35 gold badges241 silver badges201 bronze badges
2
Chỉ cần đặt cái này ở đây vì
df.x.dtype == 'float64'
Out[21]: True
6 là những gì tôi thực sự đang tìm kiếm:df['column'].name in df.select_dtypes[include='category'].columns
Cảm ơn @Jeff.
Đã trả lời ngày 24 tháng 10 năm 2019 lúc 8:25Oct 24, 2019 at 8:25
Gosutogosutogosuto
5.0494 Huy hiệu vàng36 Huy hiệu bạc57 Huy hiệu đồng4 gold badges36 silver badges57 bronze badges
Trong phiên bản Pandas của tôi [v1.0.3], có sẵn phiên bản ngắn hơn của câu trả lời của Joris.
df.cat_column.dtype
Out[20]: category
0Đã trả lời ngày 1 tháng 4 năm 2020 lúc 16:36Apr 1, 2020 at 16:36
DieterdpdieterdpDieterDP
3.7312 Huy hiệu vàng27 Huy hiệu bạc36 Huy hiệu đồng2 gold badges27 silver badges36 bronze badges
1
Tôi đã chạy vào chủ đề này để tìm kiếm cùng một chức năng chính xác, và cũng tìm ra một tùy chọn khác, ngay từ tài liệu Pandas ở đây.
Có vẻ như cách thức kinh điển để kiểm tra xem cột DataFrame có phải là một chuỗi phân loại nên như sau không:
df.cat_column.dtype
Out[20]: category
1Vì vậy, theo ví dụ được đưa ra trong câu hỏi ban đầu, đây sẽ là:
df.cat_column.dtype
Out[20]: category
2Đã trả lời ngày 17 tháng 9 năm 2020 lúc 15:37Sep 17, 2020 at 15:37
Pierre Massépierre MasséPierre Massé
5731 Huy hiệu vàng4 Huy hiệu bạc21 Huy hiệu đồng1 gold badge4 silver badges21 bronze badges
Nhìn vào câu trả lời của @Jeff Tratner, vì điều kiện
df.x.dtype == 'float64'
Out[21]: True
7 không cần phải là df.x.dtype == 'float64'
Out[21]: True
8 để được coi là một cột là cataegorical, tôi đề xuất xem xét việc phân loại các dtypes trong danh sách 'phân loại_dtypes'.df.cat_column.dtype
Out[20]: category
3Đã trả lời ngày 16 tháng 2 lúc 13:28Feb 16 at 13:28