Pandas数据转换处理

1.数据转换

1.1数据值替换

数据替换不仅可以对一个值进行替换,也可以同时对不同值进行多值替换,参数传入的方式可以是列表,也可以是字典格式。Pandas中通过replace进行数据值的替换。

data = {'姓名':['李红','小明','马芳','国志'],'性别':['0','1','0','1'],
'籍贯':['北京','甘肃','','上海']}
df = pd.DataFrame(data)
df = df.replace('','不详')
print(df)
#传入列表实现多值替换
df = df.replace(['不详','甘肃'],['兰州','兰州'])
print(df)
#传入字典实现多值替换
df = df.replace({'1':'男','0':'女'})
print(df)
#-------------------------------------------------------------------
姓名 性别  籍贯
0  李红  0  北京
1  小明  1  甘肃
2  马芳  0  不详
3  国志  1  上海

 姓名 性别  籍贯
0  李红  0  北京
1  小明  1  兰州
2  马芳  0  兰州
3  国志  1  上海

 姓名 性别  籍贯
0  李红  女  北京
1  小明  男  兰州
2  马芳  女  兰州
3  国志  男  上海

1.2使用函数或映射进行数据转换

data = {'姓名':['李红','小明','马芳','国志'],'性别':['0','1','0','1'],
'籍贯':['北京','兰州','兰州','上海']}
df = pd.DataFrame(data)
df['成绩'] = [58,86,91,78]
print(df)
def grade(x):
    if x>=90:
        return '优'
    elif 70<=x<90:
        return '良'
    elif 60<=x<70:
        return '中'
    else:
        return '差'
df['等级'] = df['成绩'].map(grade)
print(df)
#----------------------------------------------------
  姓名 性别  籍贯  成绩
0  李红  0  北京  58
1  小明  1  兰州  86
2  马芳  0  兰州  91
3  国志  1  上海  78
姓名 性别  籍贯  成绩 等级
0  李红  0  北京  58  差
1  小明  1  兰州  86  良
2  马芳  0  兰州  91  优
3  国志  1  上海  78  良

 2.数据标准化

2.1离差标准化数据

离差标准化是将原始数据的数值映射到[0,1]。转换公式如下:

x_{1}=\frac{x-min}{max-min}

def MinMaxScale(data):
    data = (data-data.min())/(data.max()-data.min())
    return data
x = np.array([[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]])
print('原始数据为:\n',x)
x_scaled = MinMaxScale(x)
print('标准化后矩阵为:\n',x_scaled,end = '\n')
#--------------------------------------------------------------
原始数据为:
 [[ 1. -1.  2.]
 [ 2.  0.  0.]
 [ 0.  1. -1.]]
标准化后矩阵为:
 [[0.66666667 0.         1.        ]
 [1.         0.33333333 0.33333333]
 [0.33333333 0.66666667 0.        ]]

2.2标准差标准化数据

标准差标准化又称零均值标准化或z分数标准化,经过该方法处理的数据均值为0,标准差为1,转换公式如下:

x_{1}=\frac{x-mean}{std}

def StandardScale(data):
    data = (data-data.mean())/data.std()
    return data
x = np.array([[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]])
print('原始数据为:\n',x)
x_scaled = StandardScale(x)
print('标准化后矩阵为:\n',x_scaled,end='\n')
#------------------------------------------------------------------
原始数据为:
 [[ 1. -1.  2.]
 [ 2.  0.  0.]
 [ 0.  1. -1.]]
标准化后矩阵为:
 [[ 0.52128604 -1.35534369  1.4596009 ]
 [ 1.4596009  -0.41702883 -0.41702883]
 [-0.41702883  0.52128604 -1.35534369]]

3.数据离散化

3.1等宽法

Pandas提供了cut函数,可以进行连续型数据的等宽离散化。

np.random.seed(666)
score_list = np.random.randint(25, 100, size = 10)
print('原始数据:\n',score_list)
bins = [0, 59, 70, 80, 100]
score_cut = pd.cut(score_list, bins)
print(pd.value_counts(score_cut))# 统计每个区间人数
#----------------------------------------------------
原始数据:
 [27 70 55 87 95 98 55 61 86 76]
(80, 100]    4
(0, 59]      3
(59, 70]     2
(70, 80]     1

3.2等频法

相比于等宽法,等频法避免了类分布不均匀的问题,但是也有可能将数值非常相近的两个值分到不同的区间。

3.3聚类分析法

主要是通过聚类分析算法进行聚类,然后处理聚类得到的簇,为合并到一个簇的连续型数据做同一标记。

猜你喜欢

转载自blog.csdn.net/m0_64087341/article/details/125036445
今日推荐