Numpy pandas: 使用 np.seterr(all=’raise’) 时出现浮点错误及缺失数据解决方法

Numpy pandas: 使用 np.seterr(all=’raise’) 时出现浮点错误及缺失数据解决方法

在本文中,我们将介绍使用 Numpy 和 Pandas 过程中出现浮点错误以及缺失数据的问题,并针对问题提出解决思路。

阅读更多:Numpy 教程

Numpy 浮点错误及解决方法

在使用 Numpy 过程中,我们经常会用到设置浮点错误处理方式的函数 np.seterr()。然而,在设置 np.seterr(all='raise')(将错误信息输出)时,可能会出现以下错误:

FloatingPointError: divide by zero encountered in true_divide

这是由于在计算中除数为零时,numpy 默认会输出警告信息而不是抛出异常,但是设置了 np.seterr(all='raise') 后则会抛出异常。例如下面的代码:

import numpy as np

np.seterr(all='raise')

a = np.array([0, 1])
b = np.array([0, 0])

c = a / b

这段代码会抛出 FloatingPointError 异常。解决方法可以是将除数为零的部分赋值为 nan,如下:

import numpy as np

np.seterr(all='raise')

a = np.array([0, 1])
b = np.array([0, 0])

b[b == 0] = np.nan

c = a / b

这样就可以避免抛出异常并得到需要的结果。

Pandas 缺失数据及解决方法

在使用 Pandas 进行数据分析时,经常会遇到缺失数据的情况。例如以下的数据表:

学号 姓名 年龄 成绩
1001 张三 20 78
1002 李四 NaN 90
1003 王五 22 NaN
1004 赵六 NaN NaN

缺失数据会对数据处理和分析造成影响。Pandas 可以使用 isnull() 函数判断缺失数据。例如以下代码:

import pandas as pd

data = {'学号': ['1001', '1002', '1003', '1004'],
        '姓名': ['张三', '李四', '王五', '赵六'],
        '年龄': [20, None, 22, None],
        '成绩': [78, 90, None, None]}

df = pd.DataFrame(data)

print(df.isnull())

运行结果为:

     学号     姓名     年龄     成绩
0  False  False  False  False
1  False  False   True  False
2  False  False  False   True
3  False  False   True   True

可以看到,该数据表中,缺失数据分别为第二行的年龄和第三、四行的成绩,isnull() 函数判断为 True。

Pandas 中针对缺失数据还有以下函数:

  • dropna():删除含有缺失数据的行或列。
  • fillna(value):根据 value 填充缺失数据。
  • interpolate():根据已有数据进行插值,填充缺失数据。

例如以下代码:

import pandas as pd

data = {'学号': ['1001', '1002', '1003', '1004'],
        '姓名': ['张三', '李四', '王五', '赵六'],
        '年龄': [20, None, 22, None],
        '成绩': [78, 90, None, None]}

df = pd.DataFrame(data)

df = df.dropna(axis=0)  # 删除含有缺失数据的行

print(df)

df = df.fillna(value={'年龄': 0, '成绩': 60})  # 根据字典填充缺失数据

print(df)

df = df.interpolate()  # 插值填充缺失数据

print(df)

运行结果为:

     学号  姓名  年龄  成绩
0  1001  张三   20  78
     学号  姓名  年龄  成绩
0  1001  张三   20  78
2  1003  王五   22  60
     学号  姓名   年龄    成绩
0  1001  张三  20.0  78.0
2  1003  王五  22.0  69.0

可以看到,使用 dropna() 函数删除含有缺失数据的行,使用 fillna() 函数根据字典填充缺失数据,使用 interpolate() 函数进行插值填充缺失数据,最终得到一份完整的数据表。

总结

本文介绍了使用 Numpy 和 Pandas 过程中,可能会遇到的浮点错误和缺失数据问题,并提出了解决思路。希望能够对大家的数据分析过程有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程