Pandas数据预处理(二)

时间煮雨
@R星校长

2关:清洗数据

任务描述

本关任务:读取数据,输出删除NA值以及重复值之后的结果,并重置索引列。

相关知识

数据清洗的目的有两个,第一是通过清洗让数据可用。第二是让数据变的更适合进行后续的分析工作。换句话说就是有”脏”数据要洗,干净的数据也要洗。

缺失值处理

检查缺失值

Pandas提供了isnull()notnull()两个函数来检测数据中的NaN值。SeriesDataFrame对象都可以使用。

df = pd.DataFrame({
    
    
    "one": [1, 2, np.nan, 5, np.nan, np.nan, 68],
    "two": ["a","b","c",np.nan,"f",np.nan,"g"]})
df.isnull()    # notnull()则相反,非空的显示True

输出:

    one    two
0  False  False
1  False  False
2   True  False
3  False   True
4   True  False
5   True   True
6  False  False

处理缺失值*

扫描二维码关注公众号,回复: 12410404 查看本文章

Pandas中可以通过fillna()函数来用非空数据填充NA值,如果想排除缺少的值,可以使用dropna()函数。

填充:

df = pd.DataFrame({
    
    
    "one": [1, 2, np.nan, 5, np.nan, np.nan, 68],
    "two": ["a","b","c",np.nan,"f",np.nan,"g"]})
df.fillna("a")   #可以填充标量

输出:

 one two
0   1   a
1   2   b
2   a   c
3   5   a
4   a   f
5   a   a
6  68   g

删除缺失值时,可以传入axis参数,axis=0时则整行被删除,反之则整列被删除。默认值为0

df = pd.DataFrame({
    
    
    "one": [1, 2, np.nan, 5, np.nan, np.nan, 68],
    "two": ["a","b","c",np.nan,"f",np.nan,"g"]})
df.dropna()

输出:

    one two
0   1.0   a
1   2.0   b
6  68.0   g

重复值处理

检查重复值

Pandas中的duplicated()返回boolSeries序列表示该行是不是重复值。

df = pd.DataFrame({
    
    
    "one": [1, 2, np.nan, 1, np.nan, np.nan, 68],
    "two": [1,"b","c",1,"f",np.nan,"g"]})
df.duplicated()

输出:

0    False
1    False
2    False
3     True
4    False
5    False
6    False
dtype: bool

重复值处理

drop_duplicates()直接对重复数据(行)进行删除,返回DataFrame

df = pd.DataFrame({
    
    
    "one": [1, 2, np.nan, 1, np.nan, np.nan, 68],
    "two": [1,"b","c",1,"f",np.nan,"g"]})
df.drop_duplicates()

输出:

    one  two
0   1.0    1
1   2.0    b
2   NaN    c
4   NaN    f
5   NaN  NaN
6  68.0    g

可以传入一个列名参数,该列的所有重复行将会删除:

df.drop_duplicates("one")

输出:

    one two
0   1.0   1
1   2.0   b
2   NaN   c
6  68.0   g

异常值处理

检测异常值

发现异常值的方法是对数据进行描述性统计。使用describe函数可以生成描述统计结果,然后观察异常值的存在。超出数据正常范围的值即为异常值。

data ={
    
    
'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack','Lee']),
'Age':pd.Series([25,26,25,23,30,29,23,34]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78])}
df = pd.DataFrame(d)
df.describe()

输出:

            Age     Rating
count  12.000000  12.000000
mean   31.833333   3.743333
std     9.232682   0.661628
min    23.000000   2.560000
25%    25.000000   3.230000
50%    29.500000   3.790000
75%    35.500000   4.132500
max    51.000000   4.800000

异常值处理

检测到了异常值,我们需要对其进行一定的处理。而一般异常值的处理方法可大致分为以下几种:

  • 直接将含有异常值的记录删除;
  • 将异常值视为缺失值,利用缺失值处理的方法进行处理;
  • 可用前后两个观测值的平均值修正该异常值;
  • 直接在具有异常值的数据集上进行数据挖掘。

是否要删除异常值可根据实际情况考虑。因为一些模型对异常值不很敏感,即使有异常值也不影响模型效果。

编程要求

按照以下要求,补全右侧代码:
通过read_csv函数读取step2/message.csv文件中的数据,输出删除NA值以及重复值之后的结果,并重置索引列

message.csv说明:

列名 说明
name 姓名
year 工作年份
salary 薪水

预期输出:

  index         name  year   salary
0       0       Braund     1  550.000
1       1      Cumings    14  700.000
2       2    Heikkinen     3  240.000
3       4        Allen     2  775.000
4       5        Moran    11  175.000
5       7      Palsson     3  135.000
6       8      Johnson     2  100.000
7       9       Nasser    13  115.000
8      12  Saundercock     4  776.667
9      13    Andersson     6  765.000
10     14      Vestrom    13  708.333
11     15   Masselmani     8  110.000
12     16     Williams     5  900.000
13     20      Beesley     1  612.500
14     21      McGowan     6  300.000
15     24      Asplund     6   90.000

开始你的任务吧,祝你成功!

import pandas as pd

def clean():
    #********** Begin *********#
    
    df = pd.read_csv("step2/message.csv")
    df1 = df.dropna()
    return df1.drop_duplicates().reset_index()
    
	#********** End **********#

if __name__ == '__main__':
    print(clean())

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44745905/article/details/111601723