0102-【课程实战】-Python数据分析炒菜-第5章-淘米洗菜——数据预处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leadingsci/article/details/89290696

5.1 缺失值处理

NaN代表缺失值

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
df

在这里插入图片描述

# 查看
df.info(0

在这里插入图片描述

# 判断是否缺失
df.isnull()

在这里插入图片描述

5.1.2 缺失值删除

删除含有缺失值的行

df.dropna()

在这里插入图片描述
只删除,整行均为NaN的行

df.dropna(how="all")

5.1.3 缺失值填充

一般情况下,只要数据缺失比例不是高于30%,尽量别删除,而是选择填充;

用0来填充

df.fillna(0)

在这里插入图片描述

指明列填充

df.fillna({"客户分类":"A类"})

df.fillna({"客户分类":"A类","区域":"一线城市",})

在这里插入图片描述


5.2 重复值处理

drop_duplicates() ,对所有值进行重复值判断,且默认保留第一个(行)值

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
df

在这里插入图片描述

删除整行

df.drop_duplicates()

在这里插入图片描述
只对某一列或多列进行判断

多列去重时,要两列均为重复时,才视为重复。

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
df.drop_duplicates(subset = "用户ID")

df.drop_duplicates(subset = ["用户ID","区域"])

在这里插入图片描述
问题:为什么,区域出现有重复,而不删掉

去重保留哪一个

# keep默认为first
df.drop_duplicates(subset = ["用户ID","是否省会"],keep="first")

# last
df.drop_duplicates(subset = ["用户ID","是否省会"],keep="last")

# False,把全部重复值删掉
df.drop_duplicates(subset = ["用户ID","是否省会"],keep=False)

在这里插入图片描述


5.3 异常值的检测与处理

5.3.1 异常值检测

  • 根据业务经验划定不同指标的正常范围,超出该范围的值为异常值;
  • 绘制箱型图,大于或小于上边缘,下边缘的点为异常值;
  • 如果数据服从正态分布,则可以利用3d原则:如果一个值的平均值超过3倍标准差,则为异常值

5.3.2 异常值处理

  • 删除
  • 把异常值当作缺失值填充
  • 把异常值当作特殊情况,研究异常值出现的原因

先筛选不存在异常值的表出来,得到异常值的新表。再对异常值进行替换replace();


5.4 数据类型转换

5.4.1 数据类型

6种数据类型

  • int
  • float
  • object —— 对象类型,用O表示。如含有数字和英文组合时。
  • string_ —— 字符串类型
  • unicode_——固定长度的unicode类型
  • datetime64[ns] ——时间格式

**info()**查看整表

dtype查看列

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
print(df)

df.info()

df["区域"].dtype

输出:

    用户ID 客户分类    区域 是否省会  7月销量  8月销量  9月销量
0  59224   A类  一线城市    是     6    20     0
1  55295   B类  三线城市    否    37    27    35
2  46035   A类  二线城市    是     8     1     8
3  46035   A类  二线城市    是     8     1     8
4   2459   C类  一线城市    是     7     8    14
5  22179   B类  三线城市    否     9    12     4

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 7 columns):
用户ID    6 non-null int64
客户分类    6 non-null object
区域      6 non-null object
是否省会    6 non-null object
7月销量    6 non-null int64
8月销量    6 non-null int64
9月销量    6 non-null int64
dtypes: int64(4), object(3)
memory usage: 416.0+ bytes

Out[23]:
dtype('O')

5.4.2 类型转换

df[“列名”].astype(“转换类型”)

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
df
df["7月销量"].dtype
df["7月销量"].astype("float64")

输出:

0     6.0
1    37.0
2     8.0
3     8.0
4     7.0
5     9.0
Name: 7月销量, dtype: float64

5.5 索引设置

df = pd.read_csv(r"C:\Users\leadi\Python\01.python\input\train-pivot.csv",encoding="gbk")
df

在这里插入图片描述表格没有索引时,默认从0开始。

列没有索引时,可以指定字段

df.columns = ["a","b","c","d","e","f","g"]
df

# 添加行索引
#df.index = ["a","b","c","d","e","f","g"]

在这里插入图片描述

5.5.2 重新设置索引

set_index()

df.set_index("用户ID")

在这里插入图片描述
问题:索引后,原来的那一列,也在表格之外了

set_index()传入两个或多个列名,叫作层次索引,一般用在某一一列含有多个值的情况下。

df.set_index(["是否省会","客户分类"])

在这里插入图片描述

5.5.3 重命名索引

rename()

df.rename(columns = {"用户ID":"新用户ID","区域":"新区域"})

在这里插入图片描述

同时命名行索引,列索引
index

df.rename(columns = {"用户ID":"新用户ID","区域":"新区域"},index = {0:"a",1:"b"})

在这里插入图片描述

5.5.4 重置索引

reset_index(level = None,drop= False,inplace=False)

  • level 指定层次化索引的第几级
  • drop 是否将原索引删掉
  • inplace 是否修改原数据表

当去重,或经过筛选后的新表格,index仍保持原来,而按顺序的index,需要对index重新整理

如当index出现缺失,或重复

df2 = df.rename(columns = {"用户ID":"新用户ID","区域":"新区域"},index = {0:"a",1:"2"})
df2

在这里插入图片描述

df2.reset_index(drop=True)

在这里插入图片描述

对多重索引进行处理

df.set_index(["是否省会","客户分类"])

在这里插入图片描述

df2 = df.set_index(["是否省会","客户分类"])
df2.reset_index()

在这里插入图片描述

# 只对0级恢复
df2.reset_index(level = 0)

在这里插入图片描述
将原索引删除

df2.reset_index(drop=True)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/leadingsci/article/details/89290696