基于pandas数据清洗

基于pandas数据清洗


--- 原数据会存在缺失值 (空值)
--- 重复值
--- 异常值

# 处理丢失数据
#有两种丢失数据:
None
np.nan(NaN)
# 两种丢失数据的区别:
import numpy as np
type(None)
# -- 为什么在在数据分析中要用的是浮点型而不是对象类型?
# 因为nan可以参与运算   None 不能参与运算
None + 1  # 报错
np.nan + 1  # nan
# pandas 处理空值的操作
isnull  notnull  any  all  dropna  fillna
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
# 伪造一组数据,存在空值
df = DataFrame(data=np.random.randint(0,100,size=(8,6)))
df.iloc[2,3] = None
df.iloc[4,4] = np.nan
df.iloc[5,2] = None
df
012345
0193276.022.049.022
1632185.086.012.079
2557693.0NaN78.050
3244036.063.030.092
4386693.042.0NaN89
58159NaN70.083.014
6429219.09.030.074
7124291.055.087.015
# --- 方式1:对空值进行过滤(删除所在的行数据)
#--- isnull  notnull  any all

df.isnull().any(axis = 1)  #返回所有存在空值的行
drop_index = df.loc[df.isnull().any(axis = 1) ].index
df.drop(labels=drop_index,axis=0)  # 删除对应的行数据

012345
0193276.022.049.022
1632185.086.012.079
3244036.063.030.092
6429219.09.030.074
7124291.055.087.015
#  方式2:对缺失值进行覆盖
df
012345
0193276.022.049.022
1632185.086.012.079
2557693.0NaN78.050
3244036.063.030.092
4386693.042.0NaN89
58159NaN70.083.014
6429219.09.030.074
7124291.055.087.015
df.fillna(method = 'bfill',axis=1)  # 向前填充   使用水平方向的向前填充去补充空值  axis=0 纵向  axis = 1 横向
C:\Users\LENOVO\AppData\Local\Temp\ipykernel_15040\198194620.py:1: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.
  df.fillna(method = 'bfill',axis=1)  # 向前填充   使用水平方向的向前填充去补充空值
012345
019.032.076.022.049.022.0
163.021.085.086.012.079.0
255.076.093.078.078.050.0
324.040.036.063.030.092.0
438.066.093.042.089.089.0
581.059.070.070.083.014.0
642.092.019.09.030.074.0
712.042.091.055.087.015.0
# 填充空值: df.fillna(method = 'ffill',axis=0).fillna(method='befill',axis=0)
# 检测下是否填充完整   data.isnull().any(axis=0)

# 重复数据和异常数据的处理
df = DataFrame(data = np.random.randint(0,100,size=(8,4)))
df.iloc[2] = [0,0,0,0]
df.iloc[4] = [0,0,0,0]
df.iloc[5] = [0,0,0,0]
df
0123
09054216
127684498
20000
331907648
40000
50000
680998593
766483423
# 使用 drop_duplicates
df.drop_duplicates(keep='first')
0123
09054216
127684498
20000
331907648
680998593
766483423
# 处理异常数据
# 自定义一个 1000 行 3列(A,B,C)取值范围为0-1的数据源,然后将C列中的值大于其两倍标准差的值进行清洗
df = DataFrame(data=np.random.random(size=(1000,3)),columns=['A','B','C'])
# 判定异常值的条件
twice_std = df['C'].std()*2

df['C'] > twice_std
df.loc[~(df['C'] > twice_std)]
ABC
00.8574030.9254670.414313
20.7968590.0420080.473506
30.1424720.3242350.191976
40.4684020.0446930.383667
50.3331890.4499650.149515
............
9830.0953790.9653170.104301
9880.0533570.8649760.320073
9910.5054500.0555450.405785
9950.5038500.3105660.167394
9980.5835210.1283410.417372

559 rows × 3 columns


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值