📜  删除 nans 和 infs python (1)

📅  最后修改于: 2023-12-03 15:22:42.360000             🧑  作者: Mango

删除NaN和Inf

在数据处理的过程中,有时候会遇到缺失数据NaN(Not a Number)和无穷大Inf(Infinity),这些数据会对数据分析和挖掘带来困扰,因此需要删除它们。

删除NaN

删除NaN的方法有很多种,下面介绍几种常见的方法:

(1)使用pandas库删除NaN

import pandas as pd

df = pd.read_csv("data.csv")
df = df.dropna() # 删除含有NaN的行

这个方法可以快速删除含有NaN的行,但是在数据量大的情况下有可能会造成内存溢出。

(2)使用numpy库删除NaN

import numpy as np

arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [7, 8, 9]])
arr = arr[~np.isnan(arr).any(axis=1)] # 删除含有NaN的行

这个方法使用了numpy的isnan()函数判断是否为NaN,然后使用any()函数找到含有NaN的行,最后使用布尔索引删除这些行。

(3)使用Python标准库删除NaN

list = [1, 2, np.nan, 4, np.nan]
list = [x for x in list if not np.isnan(x)] # 删除含有NaN的元素

这个方法使用列表推导式将不含有NaN的元素重新写入列表中,达到删除NaN的效果。

删除Inf

和删除NaN一样,删除Inf的方法也有多种:

(1)使用pandas库删除Inf

import pandas as pd

df = pd.read_csv("data.csv")
df = df[np.isfinite(df['column_name'])] # 删除含有Inf的行

这个方法使用了numpy的isfinite()函数判断是否为有限的数,然后使用布尔索引删除含有Inf的行。

(2)使用numpy库删除Inf

import numpy as np

arr = np.array([[1, 2, np.inf], [4, np.inf, 6], [7, 8, 9]])
arr = arr[~np.isinf(arr).any(axis=1)] # 删除含有Inf的行

这个方法使用了numpy的isinf()函数判断是否为Inf,然后使用any()函数找到含有Inf的行,最后使用布尔索引删除这些行。

(3)使用Python标准库删除Inf

list = [1, 2, np.inf, 4, np.inf]
list = [x for x in list if x != np.inf] # 删除含有Inf的元素

这个方法使用列表推导式将不含有Inf的元素重新写入列表中,达到删除Inf的效果。