📜  从给定的 Pandas DataFrame 中删除无限值

📅  最后修改于: 2022-05-13 01:54:38.457000             🧑  作者: Mango

从给定的 Pandas DataFrame 中删除无限值

让我们讨论如何从 Pandas 数据框中删除无限值。首先让我们制作一个数据框:

例子:

Python3
# Import Required Libraries
import pandas as pd
import numpy as np
  
# Create a dictionary for the dataframe
dict = {'Name': ['Sumit Tyagi', 'Sukritin', 'Akriti Goel',
                 'Sanskriti', 'Abhishek Jain'],
        'Age': [22, 20, np.inf, -np.inf, 22], 
        'Marks': [90, 84, 33, 87, 82]}
  
# Converting Dictionary to Pandas Dataframe
df = pd.DataFrame(dict)
  
# Print Dataframe
df


Python3
# Replacing infinite with nan
df.replace([np.inf, -np.inf], np.nan, inplace=True)
  
# Dropping all the rows with nan values
df.dropna(inplace=True)
  
# Printing df
df


Python3
# Changing option to use infinite as nan
pd.set_option('mode.use_inf_as_na', True)
  
# Dropping all the rows with nan values
df.dropna(inplace=True)
  
# Printing df
df


Python3
# Changing option to use infinite as nan
with pd.option_context('mode.use_inf_as_na', True):
    
    # Dropping the rows with nan 
    # (or inf) values
    df.dropna(inplace=True)
  
# Printing df
df


Python3
# Creating filter
df_filter = df.isin([np.nan, np.inf, -np.inf])
  
# Masking df with the filter
df = df[~df_filter]
  
# Dropping rows with nan values
df.dropna(inplace=True)
  
# Printing df
df


输出:

方法一:将infinite替换为Nan,然后用Nan删除行

我们将首先用 NaN 值替换无限值,然后使用 dropna() 方法删除具有无限值的行。 df.replace() 方法采用 2 个位置参数。首先是要替换的值列表,其次是要替换的值。

Python3

# Replacing infinite with nan
df.replace([np.inf, -np.inf], np.nan, inplace=True)
  
# Dropping all the rows with nan values
df.dropna(inplace=True)
  
# Printing df
df

输出:

方法 2:更改 Pandas 选项以将无限视为 Nan

Pandas 提供了使用无限作为 Nan 的选项。它使整个 pandas 模块将无限值视为 nan。我们可以通过使用 pd.set_option() 来做到这一点。它在整个 Jupyter Notebook 中全局设置选项。
句法:

pd.set_option('mode.use_inf_as_na', True)

它将选项设置为在整个会话期间使用无限作为 Nan 值,或者直到选项未设置回 False。

Python3

# Changing option to use infinite as nan
pd.set_option('mode.use_inf_as_na', True)
  
# Dropping all the rows with nan values
df.dropna(inplace=True)
  
# Printing df
df

输出:

方法 3:将无限视为 Nan 但使用 option_context

我们可以使用 pd.option_context() 代替全局设置选项的 pd.set_options(),它仅在特定范围内更改选项。

Python3

# Changing option to use infinite as nan
with pd.option_context('mode.use_inf_as_na', True):
    
    # Dropping the rows with nan 
    # (or inf) values
    df.dropna(inplace=True)
  
# Printing df
df

输出:

方法4:使用过滤器

我们将首先创建一个返回布尔数据框的过滤器,并使用此过滤器来屏蔽无限值。

Python3

# Creating filter
df_filter = df.isin([np.nan, np.inf, -np.inf])
  
# Masking df with the filter
df = df[~df_filter]
  
# Dropping rows with nan values
df.dropna(inplace=True)
  
# Printing df
df

输出: