当前位置:   article > 正文

Python3:Pandas的简单使用5(NaN值的处理,特殊显示值?的处理以及数据的分组和聚合)_python pandas nan

python pandas nan

1.声明

当前的内容用于本人复习使用,主要是针对Pandas读取数据出现NaN值时的处理,以及读取的时候产生?或者其他值的处理,还有分组和统计。

2.处理NaN值

在读取数据的时候可能出现某个值缺失,这个时候Pandas默认使用NaN代替缺失值!

准备具有确实值的数据:
在这里插入图片描述

import  pandas as pd
import  numpy as np

pd_dataFrame = pd.read_csv("test.csv",index_col=0)
print("输出当前读取文件的数据:\n{}".format(pd_dataFrame))
print(type(pd_dataFrame.values.dtype))
# 从数据中可以看出当前的数据中存在许多NaN值
# 现在开始处理NaN值
print("判断当前的数据中具有NaN数据为:\n{}".format(pd_dataFrame.isna()))
# 或者使用isnull()
# print("判断当前的数据中具有NaN数据为:\n{}".format(pd_dataFrame.isnull()))
# 或者使用pd.isna()或者pd.isnull()
# print(pd.isnull(pd_dataFrame))
# print(pd.isna(pd_dataFrame))

# 处理NaN值,pd.mean()就是获取这列的平均值,inplace就表示是否操作当前的数据,对原来的数据进行修改
replace_dataFrame = pd_dataFrame.fillna(pd_dataFrame.mean(),inplace=False)
print(replace_dataFrame)

# 使用删除NaN值的方式处理数据,默认删除的就是行的数据,如果包含NaN就直接删除这一行数据,可以指定当前的axis
# drop_dataFrame = pd_dataFrame.dropna(inplace=False)
drop_dataFrame = pd_dataFrame.dropna(axis=1,inplace=False)
print(drop_dataFrame)

# 直观方式看出当前的数据是否包含NaN
print(pd_dataFrame.isnull().any())
print(pd_dataFrame.notnull())
# 当前的数据的结果显示的数据为:每一列中是否包含NaN,如果包含就显示True,否者显示False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

结果:
在这里插入图片描述
总结:

1.首先需要判断当前的数据是否存在NaN数据

  1. 可以使用pd.isnull()或者pd.notnull(),或者pd.isna()

2.在处理NaN值的时候可以使用删除方法,就是将NaN的那一行或者那一列删掉,可以使用pd.dropna(),这个时候可以指定axis表示删除的方式,还有inplace表示是否操作原表

3.可以使用填补数据的方式,将原来的NaN填充其他数据,pd.fillna()

3.处理特殊字符(?号或者其他)

就是Pandas读取文件的时候读出了特殊的字符,不是NaN的时候

# 为当前的?号类型的数据设置一个默认值,就是处理?号值
# 首先将原来的?号所在的值设置为NaN,然后直接将这些数据按照NaN的处理方式来处理
# 1.替换?号值,设置为NaN

import numpy as np
import  pandas as pd

# 首先使用一个模拟的并读取数据为:?,就是读取文件后出现了?号的数据
has_undifind_file = "?_file.cvs"
read_file =pd.read_csv(has_undifind_file)
replace_pd =  read_file.replace(to_replace="?",value=np.nan)

# 按照NaN的方式处理数据
default_value = 1
handler_result = replace_pd.fillna(default_value,inplace=False)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

1.我们可以先将原来的特殊字符使用替换的方式替换成NaN,需要使用pd.replace(),需要指定替换的字符to_place和替换的字符或者值value

2.然后按照上面对NaN的数据处理即可

4.分组操作和聚合

# 使用分组和聚合操作,当前的分组和聚合都是在pandas来实现的
import pandas as pd

students = [["101", "张三", 80, 70, 100],
            ["101", "李四", 70, 70, 50],
            ["101", "王五", 60, 50, 70],
            ["102", "赵六", 90, 70, 80],
            ["102", "老七", 55, 49, 88],
            ["102", "赵六", 90, 70, 80],
            ["103", "老七", 55, 49, 88],
            ["104", "赵六", 90, 70, 80],
            ["105", "老七", 55, 49, 88],
            ]

pd_students = pd.DataFrame(students, columns=["class", "name", "语文", "数学", "英语"])
print(pd_students)
print("=============")
print("输出每个班级中数学成绩最高的分数:\n{}".format(pd_students.groupby("class")["数学"].max()))

# 使用series方式实现分组以及当前的聚合操作
math = [80, 90, 66]
pd_series = pd.Series(math, index=["语文", "数学", "英语"])

print(pd_series.groupby(pd_series).max())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
'
运行

结果:

在这里插入图片描述
总结:

1.分组使用pd.groupby(),需要指定按照什么分组

2.实现统计的时候需要在当前的groupby的方法之后才能调用count之类的,类似于数据库的分组和聚合操作

5.总结

1.在处理NaN值的时候,需要先判断,然后使用填充数据或者删除数据的方式

2.在处理特殊值的时候,可以使用pd.replace()方法将其转换成其他的值或者直接替换成NaN,然后按照NaN来处理

3.分组聚合就是类似数据库的分组聚合操作

以上纯属个人见解,如有问题请联系本人!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/931830
推荐阅读
相关标签
  

闽ICP备14008679号