Pandas cut(~)
方法將數值分類為箱(區間)。
參數
1. x
| array-like
一個一維輸入數組,其數值將被分段到容器中。
2. bins
| int
或sequence<scalar>
或 IntervalIndex
bins
的指定類型決定了 bin 的計算方式:
類型 |
說明 |
---|---|
|
equal-width bin 的數量。 |
|
所需的 bin 邊。不屬於 bin 的值將設置為 |
|
要使用的確切箱子。 |
3. right
| boolean
| optional
是否排除左 bin 邊並包含右 bin 邊。默認情況下,right=True
。
4. labels
| array
或 False
| optional
所需的箱子標簽。默認情況下,labels=None
。
5. retbins
| boolean
| optional
是否返回箱子。默認情況下,retbins=False
。
6. precision
| int
| optional
容器標簽中包含的小數位數。默認情況下,precision=3
。
7. include_lowest
| boolean
| optional
是否包含第一個 bin 的左邊。默認情況下,include_lowest=False
。
8. duplicates
| string
| optional
如何處理重複的 bin 邊:
值 |
說明 |
---|---|
|
如果設置了任何重複的 bin 邊,則會拋出錯誤。 |
|
刪除重複的箱子邊並隻保留一個。 |
默認情況下,duplicates="raise"
。
9. ordered
| boolean
| optional
| v1.10~
是否嵌入排序信息。僅當返回類型為數據類型 Categorical
的 Categorical
或 Series
時,這才相關。如果提供了labels
,則ordered
隻能設置為False
。默認情況下,ordered=True
。
返回值
返回類型取決於labels
參數的類型:
-
如果
labels
未指定: -
如果
labels
是標量數組:-
如果
x
是Series
,則返回Series
。Series
中存儲的值的類型與labels
中存儲的值的類型匹配。 -
否則,返回
Categorical
。Categorical
中存儲的值的類型與labels
中存儲的值的類型匹配。
-
-
如果
labels
是布爾值False
,則返回一個 Numpy 整數數組。
如果 retbins=True
,則除了上述內容之外,容器還將作為 Numpy 數組返回。如果 x
是 IntervalIndex
,則返回 x
。
例子
考慮以下有關學生及其成績的DataFrame:
raw_grades = [3,6,8,7,4,6]
students = ["alex", "bob", "cathy", "doge", "eric", "fred"]
df = pd.DataFrame({"name":students,"raw_grade":raw_grades})
df
name raw_grade
0 alex 3
1 bob 6
2 cathy 8
3 doge 7
4 eric 4
5 fred 6
基本用法
將原始等級分為四個箱(段):
df["grade"] = pd.cut(df["raw_grade"], bins=4) # returns a Series
df
name raw_grade grade
0 alex 3 (2.999, 4.5]
1 bob 6 (4.5, 6.0]
2 cathy 8 (6.75, 8.0]
3 doge 7 (6.75, 8.0]
4 eric 4 (2.999, 4.5]
5 fred 6 (4.5, 6.0]
grade
列現在包含 bin,總共應該有 4
不同的 bin。請注意, (2.995, 4.25]
僅表示 2.995 < raw_grade <= 4.25
。
指定自定義 bin 邊
要指定自定義 bin 邊,我們可以傳入 bin 邊數組而不是 int
:
df["grade"] = pd.cut(df["raw_grade"], bins=[0,4,6,10])
df
name raw_grade grade
0 alex 3 (0, 4]
1 bob 6 (4, 6]
2 cathy 8 (6, 10]
3 doge 7 (6, 10]
4 eric 4 (0, 4]
5 fred 6 (4, 6]
我們在這裏展示相同的df
供您參考:
df
name raw_grade
0 alex 3
1 bob 6
2 cathy 8
3 doge 7
4 eric 4
5 fred 6
指定權利
要使左 bin 邊包含在內且右 bin 邊不包含,請設置 right=False
:
df["grade"] = pd.cut(df["raw_grade"], bins=[0,4,6,10], right=False)
df
name raw_grade grade
0 alex 3 [0, 4)
1 bob 6 [6, 10)
2 cathy 8 [6, 10)
3 doge 7 [6, 10)
4 eric 4 [4, 6)
5 fred 6 [6, 10)
請注意我們如何使用 [0, 4)
而不是默認的 (0, 4]
。
指定標簽
我們可以通過設置labels
參數來為我們的箱子添加標簽:
df["grade"] = pd.cut(df["raw_grade"], bins=3, labels=["C","B","A"])
df
name raw_grade grade
0 alex 3 C
1 bob 6 B
2 cathy 8 A
3 doge 7 A
4 eric 4 C
5 fred 6 B
這是cut(~)
方法的一個非常實用的函數。 labels
數組的長度必須等於指定的 bin 數量。
通過設置 labels=False
,返回 int
的 Numpy 數組:
raw_grades = [3,6,8,7,4,5]
pd.cut(raw_grades, bins=3, labels=False)
array([0, 1, 2, 2, 0, 1])
在這裏,輸出告訴我們:
-
原始等級
3
屬於 bin0
(第一個 bin)。 -
原始等級
6
屬於 bin1
(第二個 bin)。 -
等等。
指定 retbins
要獲得計算的 bin 邊,請設置 retbins=True
:
raw_grades = [3,6,8,7,4,5]
res = pd.cut(raw_grades, bins=2, retbins=True)
print("Categories: ", res[0])
print("Bin egdes: ", res[1])
Categories: [(2.995, 5.5], (5.5, 8.0], (5.5, 8.0], (5.5, 8.0], (2.995, 5.5], (2.995, 5.5]]
Categories (2, interval[float64]): [(2.995, 5.5] < (5.5, 8.0]]
Bin egdes: [2.995 5.5 8. ]
我們在這裏展示相同的df
供您參考:
df
name raw_grade
0 alex 3
1 bob 6
2 cathy 8
3 doge 7
4 eric 4
5 fred 6
指定精度
要控製顯示多少位小數,請設置precision
參數:
res = pd.cut(df["raw_grade"], bins=[0,4.33333,6.6,10], precision=2)
print(res)
0 (0.0, 4.33]
1 (4.33, 6.6]
2 (6.6, 10.0]
3 (6.6, 10.0]
4 (0.0, 4.33]
5 (4.33, 6.6]
Name: raw_grade, dtype: category
Categories (3, interval[float64]): [(0.0, 4.33] < (4.33, 6.6] < (6.6, 10.0]]
在這裏,請注意 4.3333
如何被截斷為 4.33
,如 2
的 precision
值所指定。
指定include_lowest
考慮以下:
df["grade"] = pd.cut(df["raw_grade"], bins=[3,6,10])
df
name raw_grade grade
0 alex 3 NaN
1 bob 6 (3.0, 6.0]
2 ...
默認情況下, include_lowest=False
,這意味著第一個 bin 間隔是 left-exclusive。這就是為什麽 3
的 raw_grade 不屬於這裏的任何 bin 的原因。
我們可以通過設置 include_lowest=True
來設置第一個 bin 間隔 left-inclusive :
df["grade"] = pd.cut(df["raw_grade"], bins=[3,6,10], include_lowest=True)
df
name raw_grade grade
0 alex 3 (2.999, 6.0]
1 bob 6 (2.999, 6.0]
...
我們現在看到 3
的 raw_grade
已包含在第一個 bin 中。
指定重複項
默認情況下,bin 邊必須是唯一的,否則將引發錯誤。例如:
x = [3,7,8,7,4,5]
pd.cut(x, bins=[2,6,6,10]) # duplicates="raise"
ValueError: Bin edges must be unique: array([ 2, 6, 6, 10]).
在這裏,我們有兩個值 6
的 bin 邊,因此這就是我們收到錯誤的原因。
為了刪除(刪除)多餘的 bin 邊,請設置 duplicates="drop"
,如下所示:
x = [3,7,8,7,4,5]
pd.cut(x, bins=[2,6,6,10], duplicates="drop")
[(2, 6], (6, 10], (6, 10], (6, 10], (2, 6], (2, 6]]
Categories (2, interval[int64]): [(2, 6] < (6, 10]]
我們看到值 6
的 bin 邊之一被丟棄。
指定有序
默認情況下, ordered=True
,這意味著生成的 Categorical
將被排序:
grades = [3,6,8,7,4,5]
pd.cut(grades, bins=2, labels=["B","A"]) # ordered=True
['B', 'A', 'A', 'A', 'B', 'B']
Categories (2, object): ['B' < 'A']
請注意有關排序的信息如何嵌入為 ['B'<'A']
。
通過設置 ordered=False
,可以省略此類排序信息:
grades = [3,6,8,7,4,5]
pd.cut(grades, bins=2, labels=["B","A"], ordered=False)
['B', 'A', 'A', 'A', 'B', 'B']
Categories (2, object): ['B', 'A']
要設置 ordered=False
,請確保已指定 labels
。
相關用法
- Python cudf.core.column.string.StringMethods.is_vowel用法及代碼示例
- Python cudf.Series.ceil用法及代碼示例
- Python cudf.core.column.string.StringMethods.endswith用法及代碼示例
- Python cuxfilter.charts.datashader.heatmap用法及代碼示例
- Python cusignal.windows.windows.hann用法及代碼示例
- Python cudf.DataFrame.isin用法及代碼示例
- Python cudf.core.column.string.StringMethods.title用法及代碼示例
- Python cuml.metrics.pairwise_distances.pairwise_distances用法及代碼示例
- Python cuxfilter.charts.panel_widgets.int_slider用法及代碼示例
- Python cudf.DataFrame.rmul用法及代碼示例
- Python cudf.Series.max用法及代碼示例
- Python cudf.DatetimeIndex.dayofweek用法及代碼示例
- Python cudf.DataFrame.apply用法及代碼示例
- Python cucim.skimage.feature.shape_index用法及代碼示例
- Python cuml.neighbors.KNeighborsClassifier用法及代碼示例
- Python cudf.core.column.string.StringMethods.contains用法及代碼示例
- Python cuxfilter.charts.datashader.line用法及代碼示例
- Python cudf.core.column.string.StringMethods.rsplit用法及代碼示例
- Python cudf.DataFrame.exp用法及代碼示例
- Python cudf.Series.head用法及代碼示例
- Python cudf.DataFrame.drop用法及代碼示例
- Python cudf.core.column.string.StringMethods.zfill用法及代碼示例
- Python cudf.Series.reindex用法及代碼示例
- Python cucim.skimage.filters.threshold_triangle用法及代碼示例
- Python cudf.Series.interleave_columns用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas | cut method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。