前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据清洗与准备(1)

数据清洗与准备(1)

作者头像
python数据可视化之路
发布2023-02-23 21:16:23
8440
发布2023-02-23 21:16:23
举报

在进行数据分析和建模过程中,大量时间花费在数据准备上:加载、清洗、转换和重新排列,这样的工作占用了分析师80%以上的时间。本章将讨论用于缺失值、重复值、字符串操作和其他数据转换的工具。

1、处理缺失值

缺失数据在数据分析中很容易出现,在pandas中使用NaN表示缺失值,称NaN为容易检测到的缺失值;同时python内建的None值在对象数组中也会被当做NA处理:

代码语言:javascript
复制
import numpy as np
import pandas as pd
series1 = pd.Series(['Name', 'Gender', 'Age', np.nan, None, 'score'])
-----结果-----
0    False
1    False
2    False
3     True
4     True
5    False

NA的一些处理方法如下:

NA处理方法表

方法

描述

dropna

根据每个标签的值是否为缺失数据来筛选轴标签,并允许根据丢失的数据量确定阈值

fillna

用某些值填充缺失的数据值或使用插值方法,如ffill或bfill

isnull

返回表明哪些值是缺失值

notnull

作用域isnull相反


(1)过滤缺失值

有多种过滤缺失值的方法,虽然可以用pandas.isnull手动过滤,但是dropna在过滤缺失值上更为有用,在series上使用dropna,它会返回series中的所有非空数据及其索引值。

代码语言:javascript
复制
from numpy import nan as NA
data = pd.Series([1, NA, 3.5, NA, 7])
data.dropna() #与data[data.notnull()]等价
-----结果-----
0    1.0
2    3.5
4    7.0

当处理DataFrame对象的时候,可能会复杂一点,可能想要删除全部为NA的列或者含有NA的行或列,dropna默认情况下会删除包含缺失值的行:

代码语言:javascript
复制
data = pd.DataFrame([[1, 2.5, 3], [1, NA, NA],
                     [NA, NA, NA], [NA, 5.2, 6]])
cleaned = data.dropna()
print(data)
print(cleaned)
-----结果-----
data:
    0    1    2
0  1.0  2.5  3.0
1  1.0  NaN  NaN
2  NaN  NaN  NaN
3  NaN  5.2  6.0
cleaned:
    0    1    2
0  1.0  2.5  3.0

传入how="all"删除所有值均为NA的行;传入axis=1,可以删除均为NA的列。

代码语言:javascript
复制
data.dropna(how = "all")
-----结果-----
    0    1    2
0  1.0  2.5  3.0
1  1.0  NaN  NaN
3  NaN  5.2  6.0
代码语言:javascript
复制
data[3] = NA
cleaned = data.dropna(how = 'all', axis = 1)
print(data)
print(cleaned)
-----结果-----
data:
    0    1    2   3
0  1.0  2.5  3.0 NaN
1  1.0  NaN  NaN NaN
2  NaN  NaN  NaN NaN
3  NaN  5.2  6.0 NaN
cleaned:
     0    1    2
0  1.0  2.5  3.0
1  1.0  NaN  NaN
2  NaN  NaN  NaN
3  NaN  5.2  6.0

过滤DataFrame的行的相关方法往往涉及时间序列数据,我们也可以传入thresh参数保留一定数量的行:

代码语言:javascript
复制
df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA #根据轴索引赋值
df.iloc[:2, 2] = NA
print(df)
print(df.dropna())
print(df.dropna(thresh = 2)) #保留2个观察值
-----结果-----
df:
      0      1    2
0  0.604888  NaN  NaN
1  -0.337529  NaN  NaN
2  0.423364  NaN  -0.755305
3  0.575907  NaN  0.015249
4  0.204847  -0.718295  0.612700
5  0.660646  -0.102224  -1.245912
6  0.689484  0.610255  0.648971
df.dropna():
    0         1         2
4  0.204847 -0.718295  0.612700
5  0.660646 -0.102224 -1.245912
6  0.689484  0.610255  0.648971
df.dropna(thresh=2):
       0         1         2
2  0.423364       NaN -0.755305
3  0.575907       NaN  0.015249
4  0.204847 -0.718295  0.612700
5  0.660646 -0.102224 -1.245912
6  0.689484  0.610255  0.648971

总结:

(1)处理缺失值常用dropna()方法,默认删除含有缺失值的行

(2)传入how="all"可以删除全部为缺失值的行

(3)传入axis=1可以删除列

(4)传入thresh可以保留一定数量的观察值的行

处理缺失值是数据分析的第一步,下一篇文章将介绍补全缺失值和数据转换的相关内容。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档