Python之数据转换
文章目录
重命名轴索引
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
本文地址:https://blog.csdn.net/Jormungand_V/article/details/109865974