python数据清洗 备课

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])

#


打赏
关键词: python 数据清洗

0 评论

发表评论