import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series,DataFrame
import openpyxl
# 原数据中存在缺失值,空值,重复值,异常值
# None
# NaN
# 两种空的区别:
print(type(None)) # 对象类型不能进行算数运算
print(type(np.nan))# 浮点类型能进行算数运算
# nan 空值可以参与运算,不会中断数据处理
# pandas 会将None强制转化为Nan
# 伪造一组数据(存在空值)
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
print(df)
# 方式1:对空值进行过滤(删除空所在的行数据)
print(df.isnull())
print(df.notnull())
# 哪些行中存在True
# .any 检测哪些行或者列中是否存在True
print(df.isnull().any(axis=1))
# 将上面的布尔值做为原数据的行索引
# True 对应的行数据就是存在缺失值的行索引
print(df.loc[df.isnull().any(axis=1)])
# 即将要删除的行索引
drop_index = df.loc[df.isnull().any(axis=1)].index
# newdf = df.drop(labels=drop_index,axis=0)
# print(df.drop(labels=drop_index,axis=0))
# print(df.drop(labels=drop_index)) #将缺失进行删除
print('===============notnull==================')
print( df.notnull().all(axis=1) )
# 即将要删除的行索引
new_df= df.loc[df.notnull().all(axis=1)]
print(new_df)
print('===============规律==================')
# isnull: any
# notnull:all
# dropna:可以直接将确实的行或者列进行删除
print(df.dropna(axis=0)) # axis=0 行 axis=1 列
print(df ) # axis=0 行 axis=1 列
# 方式2:对空值进行覆盖,一般情况下使用删除的方式,如果删除的数据的情况下,就要覆盖数据
print(df.fillna(method='ffill',axis=1)) #使用水平方向,空值前面的值进行填充空值
print(df.fillna(method='bfill',axis=1)) #使用水平方向,空值后面的值进行填充空值
print('===============================')
print(df.fillna(method='ffill',axis=0)) #使用垂直方向,空值前面的值进行填充空值
print(df.fillna(method='bfill',axis=0)) #使用垂直方向,空值后面的值进行填充空值
print('==============面试题=================')
df = pd.read_excel('testData.xlsx')
print(df)
df = df[[1,2,3,4]]
print(df)
print(df.dropna(axis = 0))
print(df.loc[df.notnull().all(axis=1)])
#填充控制
data = df.fillna(method='ffill',axis=0).fillna(method='bfill',axis=0)
#检测
print(data.isnull().any(axis=1))
print(data.isnull().any(axis=0))
print('=============处理重复数据==============')
df = DataFrame(data = np.random.randint(0,100,size=(8,6)))
df.iloc[2]=[0,0,0,0,0,0]
df.iloc[4]=[0,0,0,0,0,0]
df.iloc[5]=[0,0,0,0,0,0]
print(df)
print(df.drop_duplicates(keep='first')) # 保留第一个重复的数据
print(df.drop_duplicates(keep='last')) # 保留最后一个重复的数据
print(df.drop_duplicates(keep=False)) # 所有重复数据都删掉
print('=====处理异常数据======')
# ·自定义一个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
print(df['C']>twice_std)
print(df.loc[df['C']<=twice_std])
#
本篇文章链接 地址:https://wmzos.com/?id=99
添加新评论