python进阶(数据分析pandas库 二) --- 其他API

1、pd.Categorical()   

 categorical 实际上是计算一个列表型数据中的类别数,即不重复项,它返回的是一个CategoricalDtype 类型的对象,相当于在原来数据上附加上类别信息 , 具体的类别可以通过和对应的序号可以通过 codes 和 categories 来查看

import pandas as pd

tmp = pd.Categorical(['2','2','1','2','4','2','2','5'])
print(tmp)
print('-'*20)
print(tmp.codes)               ------ 对应类别的下标
print(tmp.categories)          ------ 对应的索引类别(排序后)

结果:
[2, 2, 1, 2, 4, 2, 2, 5]
Categories (4, object): [1, 2, 4, 5]
--------------------
[1 1 0 1 2 1 1 3]
Index(['1', '2', '4', '5'], dtype='object')

2、pandas 进行 独热编码 pd.get_dummies

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, 
sparse=False, drop_first=False)

例1:
one_hot_features = pd.get_dummies(combined_data_table["星座"]) # 对 combined_data_table 表的 ‘星座’ 进行独热编码,返回值为 DataFRame
print(one_hot_features)

例2:
modelData = pd.get_dummies(data=df, columns=['month','day'])
modelData.head()

'''
编码分类特征
我们可以将分类特征编码为整数,但是这种整数表示不能直接与scikit-learn估计器一起使用,因为它们期望连续输入,并且会
将类别解释为有序的,这通常是不希望的。

将分类特征转换为可与scikit-learn估计器一起使用的特征的一种可能性是使用在OneHotEncoder中实现的千分之一或热编码。 该
估计器将具有m个可能值的每个分类特征转换为m个二进制特征,并且只有一个处于活动状态。
'''

3、机器学习 标准化 Standardization 、归一化 mean removal、正则化 Normalization

标准化 Standardization (按照列 去除均值与方差,转化为标准正太分布,减少量纲的影响,用的较多)

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()

ss.fit(X_train.astype(float))

X_train_ss = ss.transform(X_train)
X_test_ss = ss.transform(X_test)

 归一化 MinMaxScaler(相对上下两个用的比较少)

from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()

mms.fit(X_train)
mms.transform(X_train)

 正则化: Normalization(按照行转为单位向量,减少过拟合)

from sklearn.preprocessing import Normalizer

norm = Normalizer()    

norm.fit(X_train)
X_train_norm = norm.transform(X_train)
X_train_norm 

'''
    标准化是将单个样本缩放为具有单位范数的过程。 如果计划使用点积或任何其他核的二次形式来量化任何一        
    对样本的相似性,则此过程可能会很有用。

    该假设是向量空间模型的基础,该向量空间模型经常用于文本分类和聚类上下文中。
'''

4、机器学习 特征离散化

  • (1)二值离散
from sklearn.preprocessing import Binarizer

df['DC'].mean()  ---- 547.9400386847191

bi = Binarizer(548)
DC_bi = bi.fit_transform(df[['DC']])
DC_bi
  • (2)多值离散
pd.cut(df['DC'], 5)
"""
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
pandas.cut是按分位数划分的
"""

0       (7.047, 178.44]
1      (519.52, 690.06]
2      (519.52, 690.06]
3       (7.047, 178.44]
4       (7.047, 178.44]
5      (348.98, 519.52]
6      (348.98, 519.52]
7      (519.52, 690.06]
8       (690.06, 860.6]
9       (690.06, 860.6]
10      (690.06, 860.6]
11      (690.06, 860.6]
12     (519.52, 690.06]
13     (519.52, 690.06]
14      (690.06, 860.6]
15      (690.06, 860.6]
16      (7.047, 178.44]
17     (519.52, 690.06]
18      (7.047, 178.44]
19      (7.047, 178.44]
20      (690.06, 860.6]
21      (690.06, 860.6]
22     (178.44, 348.98]
23     (519.52, 690.06]
24     (519.52, 690.06]
25     (519.52, 690.06]
26     (519.52, 690.06]
27     (519.52, 690.06]
28      (690.06, 860.6]
29      (690.06, 860.6]
             ...       
487    (519.52, 690.06]
488    (519.52, 690.06]
489    (519.52, 690.06]
490    (519.52, 690.06]
491    (519.52, 690.06]
492    (519.52, 690.06]
493    (519.52, 690.06]
494    (519.52, 690.06]
495    (519.52, 690.06]
496    (519.52, 690.06]
497    (519.52, 690.06]
498    (519.52, 690.06]
499    (519.52, 690.06]
500    (519.52, 690.06]
501    (519.52, 690.06]
502    (519.52, 690.06]
503    (519.52, 690.06]
504    (519.52, 690.06]
505     (690.06, 860.6]
506     (690.06, 860.6]
507     (690.06, 860.6]
508     (690.06, 860.6]
509     (690.06, 860.6]
510     (690.06, 860.6]
511    (519.52, 690.06]
512    (519.52, 690.06]
513    (519.52, 690.06]
514    (519.52, 690.06]
515    (519.52, 690.06]
516     (7.047, 178.44]
Name: DC, Length: 517, dtype: category
Categories (5, interval[float64]): [(7.047, 178.44] < (178.44, 348.98] < (348.98, 519.52] < (519.52, 690.06] < (690.06, 860.6]]

5、pandas 中 缺省值的处理

由于各种原因,许多现实世界的数据集包含缺失值,通常将其编码为空白,NaN或其他占位符。 但是,此类数据集与scikit-learn
估计器不兼容,后者假定数组中的所有值都是数字,并且都具有并具有含义。 使用不完整数据集的基本策略是丢弃包含缺失值的
整个行和/或列。 但是,这是以丢失有价值的数据为代价的(即使数据不完整)。 更好的策略是估算缺失值,即从数据的已知部
分推断出缺失值。

SimpleImputer类提供了使用缺失值所在行或列的平均值,中位数或最频繁值来估算缺失值的基本策略。 此类还允许使用不同的
缺失值编码。
【一些实践中的 tips】

尽量不要把包含个别特征缺失值的样本删除,实践中最好使用一些业务经验来做一些合理的推测值的填充,利用好样本
如果没有合适的推测手段来填充,可以填充一些像-999,-1这样的没有意义的值
其他一些可能用到的方法:
np.nan
np.inf
df.fillna
df.replace

 

  • (1)pandas API  fillna 、replace 

                 略

  • (2)scikit-learn API  SimpleImputer
from sklearn.impute import SimpleImputer

class sklearn.impute.SimpleImputer(missing_values=nan, strategy='mean', fill_value=None, 
verbose=0, copy=True, add_indicator=False)

im = SimpleImputer()
im.fit_transform(df[['DC_na']])

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值