用Pandas进行数据清洗

数据分析三剑客之Pandas。

数据清理

检测过滤缺失值

两种丢失数据:

  • None
  • np.nan(NaN)

None

None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。

1
2
3
4
5
import numpy as np
import pandas
from pandas import DataFrame
# 查看None的数据类型
type(None)

np.nan(NaN)

np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。

1
2
# 查看np.nan的数据类型
type(np.nan)

pandas中的None与NaN

pandas中None与np.nan都视作np.nan

创建DataFrame

1
2
df = DataFrame(data=np.random.randint(0,100,size=(10,8)))
df
1
2
3
4
5
6
7
#将某些数组元素赋值为nan
df.iloc[1,4] = None
df.iloc[3,6] = None
df.iloc[7,7] = None
df.iloc[3,1] = None
df.iloc[5,5] = np.nan
df

pandas处理空值操作

判断函数

  • isnull()
  • notnull()
1
2
3
4
5
df.isnull()
df.notnull()
df.isnull().any(axis=1)
df.notnull().all(axis=1)
df.loc[~df.isnull().any(axis=1)]

df.dropna() 可以选择过滤的是行还是列(默认为行):axis中0表示行,1表示的列

1
df.dropna(axis=0)

填充函数 Series/DataFrame

  • fillna():value和method参数
1
2
df_test = df.fillna(method='bfill',axis=1).fillna(method='ffill',axis=1)
df_test
1
2
#测试df_test中的哪些列中还有空值
df_test.isnull().any(axis=0)

检测过滤重复值

使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True

  • keep参数:指定保留哪一重复的行数据
  • 创建具有重复元素行的DataFrame
1
2
3
4
5
6
7
8
9
10
import numpy as np
import pandas as pd
from pandas import DataFrame

# 创建一个df
df = DataFrame(data=np.random.randint(0,100,size=(12,7)))
# 手动将df的某几行设置成相同的内容
df.iloc[1] = [6,6,6,6,6,6,6]
df.iloc[8] = [6,6,6,6,6,6,6]
df.iloc[5] = [6,6,6,6,6,6,6]
  • 使用drop_duplicates()函数删除重复的行
    • drop_duplicates(keep=’first/last’/False)
1
2
3
df.drop_duplicates()   # 默认first
df.drop_duplicates(keep='last')
df.drop_duplicates(keep=False)

检测过滤异常值

  • 得到鉴定异常值的条件
  • 使用聚合操作对数据异常检测并过滤

总结

  • 检测过滤缺失值
    • dropna
    • fillna
  • 检测过滤重复值
    • drop_duplicated(keep)
  • 检测过滤异常值
    • 得到鉴定异常值的条件
    • 将异常值对应的行删除
-------------The End-------------

本文标题:用Pandas进行数据清洗

文章作者:Naqin

发布时间:2019年10月19日 - 13:10

最后更新:2019年11月05日 - 01:11

原始链接:https://chennq.top/Pandas/20191019-learning_Pandas_2.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Naqin wechat
欢迎看官加我微信!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%