ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pandas 数据清洗之处理空值

2022-05-23 18:02:53  阅读:227  来源: 互联网

标签:False df NaN ST 空值 NUM 清洗 Pandas


本文参考自菜鸟教程
数据清洗是对一些没有用的数据进行处理的过程。
即处理数据集中数据缺失、数据格式错误、错误数据或重复数据的情况。

import pandas as pd

df = pd.read_csv('./property-data.csv')
print(df.to_string())
print(df.info())

清洗空值

检查空值----isnull()

通过 Series.isnull() 判断各个单元格是否为空。
本质上 DataFrame 返回的行或者列都是 Series 类型的数据。

# 首先设置 空 的"定义"

missing_values = ['NA', 'n/a', '--', '']    # 根据 CSV 文件寻找其中 空 的形式
df = pd.read_csv('property-data.csv', na_values=missing_values) # 重新读取 csv 文件,并设置空值
# 查看第一行有没有空值
print(df.loc[2])
print('********************************')
print(df.loc[2].isnull())
PID             100003000.0
ST_NUM                  NaN
ST_NAME           LEXINGTON
OWN_OCCUPIED              N
NUM_BEDROOMS            NaN
NUM_BATH                  1
SQ_FT                 850.0
Name: 2, dtype: object
********************************
PID             False
ST_NUM           True
ST_NAME         False
OWN_OCCUPIED    False
NUM_BEDROOMS     True
NUM_BATH        False
SQ_FT           False
Name: 2, dtype: bool
# 查看第二列有没有空值
print(df.ST_NUM)
print('********************************')
print(df.ST_NUM.isnull())
0    104.0
1    197.0
2      NaN
3    201.0
4    203.0
5    207.0
6      NaN
7    213.0
8    215.0
Name: ST_NUM, dtype: float64
********************************
0    False
1    False
2     True
3    False
4    False
5    False
6     True
7    False
8    False
Name: ST_NUM, dtype: bool

删除空值所在的行----dropna()

dropna()方法:DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明:
  axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
  how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,
     如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。

  thresh:设置需要多少非空值的数据才可以保留下来的。
  subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
  inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

print(df.to_string())
           PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH   SQ_FT
0  100001000.0   104.0      PUTNAM            Y            3        1  1000.0
1  100002000.0   197.0   LEXINGTON            N            3      1.5     NaN
2  100003000.0     NaN   LEXINGTON            N          NaN        1   850.0
3  100004000.0   201.0    BERKELEY           12            1      NaN   700.0
4          NaN   203.0    BERKELEY            Y            3        2  1600.0
5  100006000.0   207.0    BERKELEY            Y          NaN        1   800.0
6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950.0
7  100008000.0   213.0     TREMONT            Y            1        1     NaN
8  100009000.0   215.0     TREMONT            Y           na        2  1800.0
dfTemp = df.dropna(axis=0, how='any', subset=['PID', 'ST_NUM'], inplace=False)
            # 检查df中 subset 中的列
            # 一旦遇到空值  (how='any')
            # 就删除此行    (axis=0)
            # 不修改源数据  (inplace=False)
print(dfTemp.to_string())
           PID  ST_NUM    ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH   SQ_FT
0  100001000.0   104.0     PUTNAM            Y            3        1  1000.0
1  100002000.0   197.0  LEXINGTON            N            3      1.5     NaN
3  100004000.0   201.0   BERKELEY           12            1      NaN   700.0
5  100006000.0   207.0   BERKELEY            Y          NaN        1   800.0
7  100008000.0   213.0    TREMONT            Y            1        1     NaN
8  100009000.0   215.0    TREMONT            Y           na        2  1800.0

替换空值单元格----fillna()

一般指定某一列,当此列中出现空值时,使用此列的均值mean()中位数medium()众数mode()来替代空值单元格。

print(df.to_string())
           PID  ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH   SQ_FT
0  100001000.0   104.0      PUTNAM            Y            3        1  1000.0
1  100002000.0   197.0   LEXINGTON            N            3      1.5     NaN
2  100003000.0     NaN   LEXINGTON            N          NaN        1   850.0
3  100004000.0   201.0    BERKELEY           12            1      NaN   700.0
4          NaN   203.0    BERKELEY            Y            3        2  1600.0
5  100006000.0   207.0    BERKELEY            Y          NaN        1   800.0
6  100007000.0     NaN  WASHINGTON          NaN            2   HURLEY   950.0
7  100008000.0   213.0     TREMONT            Y            1        1     NaN
8  100009000.0   215.0     TREMONT            Y           na        2  1800.0
# 对 ST_NUM 列的空值,使用此列的均值替换,并修改源数据df

df.ST_NUM.fillna(df.ST_NUM.mean(), inplace=True)
print(df)
           PID      ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH  \
0  100001000.0  104.000000      PUTNAM            Y            3        1   
1  100002000.0  197.000000   LEXINGTON            N            3      1.5   
2  100003000.0  191.428571   LEXINGTON            N          NaN        1   
3  100004000.0  201.000000    BERKELEY           12            1      NaN   
4          NaN  203.000000    BERKELEY            Y            3        2   
5  100006000.0  207.000000    BERKELEY            Y          NaN        1   
6  100007000.0  191.428571  WASHINGTON          NaN            2   HURLEY   
7  100008000.0  213.000000     TREMONT            Y            1        1   
8  100009000.0  215.000000     TREMONT            Y           na        2   

    SQ_FT  
0  1000.0  
1     NaN  
2   850.0  
3   700.0  
4  1600.0  
5   800.0  
6   950.0  
7     NaN  
8  1800.0

标签:False,df,NaN,ST,空值,NUM,清洗,Pandas
来源: https://www.cnblogs.com/HOMEofLowell/p/16302204.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有