Python之数据转换——【rename()方法、cut()函数、get_dummies()函数】


重命名轴索引

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”,
)

上述方法中常用参数表示的含义如下:

  1. index,columns:表示带转换的行索引和列索引
  2. axis:表示轴的名称,可以使用index或columns,也可以使用数字0或1
  3. copy:表示是否复制底层的数据,默认为False
  4. inplace:默认为False,表示是否返回新的Pandas对象。如果设为True,则会忽略复制的值。
  5. 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”,
)

上述函数中常用参数表示的含义如下:

  1. x:表示要分箱的数组,必须是一维的
  2. bins:接收int和序列类型的数据。如果传入的是int类型的值,则表示在x范围内的等宽单元的数量(划分为多少个等间距区间);如果传入的是一个序列,则表示将x划分在指定的序列中,若不在此序列中,则为NaN。
  3. right:是否包含右端点,决定区间的开闭,默认为True
  4. labels:用于生成区间的标签
  5. retbins:是否返回bin
  6. precision:精度,默认保留三位小数
  7. 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,
)

上述函数中常用参数表示的含义如下:

  1. data:可接受数组、DataFrame或Series对象,表示哑变量处理的数据
  2. prefix:表示列名的前缀,默认为None
  3. prefix_sep:用于附加前缀作为分隔符使用,默认为“_”
  4. dummy_na:表示是否为NaN值添加一列,默认为False
  5. columns:表示DataFrame要编码的列名,默认为None
  6. sparse:表示虚拟列是否是稀疏的,默认为False
  7. 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

猜你喜欢

转载自blog.csdn.net/Jormungand_V/article/details/109865974