文章目錄
- 重命名軸索引
- 離散化連續數據
- 啞變量處理類別型數據
重命名軸索引
rename(
self,
mapper: Optional[Renamer] = None,
*,
index: Optional[Renamer] = None,
columns: Optional[Renamer] = None,
axis: Optional[Axis] = None,
copy: bool = True,
inplace: bool = False,
level: Optional[Level] = None,
errors: str = “ignore”,
)
上述方法中常用參數表示的含義如下:
- index,columns:表示帶轉換的行索引和列索引
- axis:表示軸的名稱,可以使用index或columns,也可以使用數字0或1
- copy:表示是否復制底層的數據,默認為False
- inplace:默認為False,表示是否返回新的Pandas對象。如果設為True,則會忽略復制的值。
- level:表示級別名稱,默認為None。對于多級索引,只重命名指定的標簽。
代碼:
df = pd.DataFrame({'A': ['1', '2', '4'],'B': ['9', '-80', '5.3'],'C': ['x', '5.9', '0']})
print("df:\n", df)
print("df.rename:\n", df.rename(columns={'A': 'a', 'B': 'b', 'C': 'c'}))
輸出結果:
df:A B C
0 1 9 x
1 2 -80 5.9
2 4 5.3 0
df.rename:a b c
0 1 9 x
1 2 -80 5.9
2 4 5.3 0
以上也可以根據str中提供的使字符串變成小寫的功能函數lower()來重命名索引的名稱,無需再使用字典逐個進行替換。
代碼:
print("df.rename(str.lower, axis=1):\n", df.rename(str.lower, axis=1))
輸出結果:
df.rename(str.lower, axis=1):a b c
0 1 9 x
1 2 -80 5.9
2 4 5.3 0
也可以對行索引進行重命名
代碼:
print("df.rename(index={1: 'a'}):\n", df.rename(index={1: 'a'}))
輸出結果:
df.rename(index={1: 'a'}):A B C
0 1 9 x
a 2 -80 5.9
2 4 5.3 0
離散化連續數據
cut(
x,
bins,
right: bool = True,
labels=None,
retbins: bool = False,
precision: int = 3,
include_lowest: bool = False,
duplicates: str = “raise”,
)
上述函數中常用參數表示的含義如下:
- x:表示要分箱的數組,必須是一維的
- bins:接收int和序列類型的數據。如果傳入的是int類型的值,則表示在x范圍內的等寬單元的數量(劃分為多少個等間距區間);如果傳入的是一個序列,則表示將x劃分在指定的序列中,若不在此序列中,則為NaN。
- right:是否包含右端點,決定區間的開閉,默認為True
- labels:用于生成區間的標簽
- retbins:是否返回bin
- precision:精度,默認保留三位小數
- include_lowest:是否包含左端點
cut()會返回一個Catagorical對象,我們可以將其看作一組表示面元名稱的字符串,它包含了分組的數量以及不同分類的名稱。
代碼:
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 32]
bins = [0, 18, 25, 35, 60, 100]
print("pd.cut(ages, bins):\n", pd.cut(ages, bins))
輸出結果:
pd.cut(ages, bins):[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (35, 60], (25, 35], (60, 100], (35, 60], (25, 35]]Length: 11
Categories (5, interval[int64]): [(0, 18] < (18, 25] < (25, 35] < (35, 60] < (60, 100]]
Catagorical對象中的區間范圍默認設置為左開右閉區間,如果希望設置左閉右開區間,則可以在調用cut()函數時傳入right=False進行修改。
測試對象:
df = pd.DataFrame({'A': ['1', '2', '4'],'B': ['9', '-80', '5.3'],'C': ['x', '5.9', '0']})
代碼:
print("pd.cut(df['B']):\n",
pd.cut(df['B'].astype(dtype='float'), bins, right=False))
輸出結果:
pd.cut(df['B']):0 [0.0, 18.0)
1 NaN
2 [0.0, 18.0)
Name: B, dtype: category
Categories (5, interval[int64]): [[0, 18) < [18, 25) < [25, 35) < [35, 60) < [60, 100)]
啞變量處理類別型數據
啞變量又稱虛擬變量、名義變量,從名稱上看就知道,它是人為虛設的變量,用來反映某個變量的不同類別。使用啞變量處理類別轉換,事實上就是將分類變量轉換為啞變量矩陣或指標矩陣,矩陣的值通常用“0”或“1”表示。
在Pandas中,可以使用get_dummies()函數對類別特征進行啞變量處理。
get_dummies(
data,
prefix=None,
prefix_sep="_",
dummy_na=False,
columns=None,
sparse=False,
drop_first=False,
dtype=None,
)
上述函數中常用參數表示的含義如下:
- data:可接受數組、DataFrame或Series對象,表示啞變量處理的數據
- prefix:表示列名的前綴,默認為None
- prefix_sep:用于附加前綴作為分隔符使用,默認為“_”
- dummy_na:表示是否為NaN值添加一列,默認為False
- columns:表示DataFrame要編碼的列名,默認為None
- sparse:表示虛擬列是否是稀疏的,默認為False
- drop_first:是否通過從k個分級類別中刪除第一個級來獲得k-1個分類級別,默認為False
測試對象:
df = pd.DataFrame({'A': ['1', '2', '4'],'B': ['9', '-80', '5.3'],'C': ['x', '5.9', '0']})
代碼:
test1 = df['B'].astype(dtype='float')
print(pd.get_dummies(test1, prefix='col', prefix_sep='_'))
輸出結果:
col_-80.0 col_5.3 col_9.0
0 0 0 1
1 1 0 0
2 0 1 0