欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python之数据转换

程序员文章站 2023-12-29 14:55:22
文章目录重命名轴索引离散化连续数据哑变量处理类别型数据重命名轴索引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...


重命名轴索引

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

本文地址:https://blog.csdn.net/Jormungand_V/article/details/109865974

上一篇:

下一篇: