Pandas Remover Linhas com NaN

Pandas Remover Linhas com NaN

  1. Pandas soltam linhas com NaN usando o método DataFrame.notna()
  2. Pandas Soltar linhas apenas com valores NaN para todas as colunas usando o método DataFrame.dropna()
  3. Pandas Soltar linhas apenas com valores NaN para uma coluna particular usando o método DataFrame.dropna()
  4. Linhas de Pandas com valores NaN para qualquer coluna utilizando DataFrame.dropna() Método

Este tutorial explica como podemos largar todas as linhas com valores NaN utilizando os métodos DataFrame.notna() e DataFrame.dropna().

Utilizaremos o DataFrame no código de exemplo abaixo.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame({
    'Name': ['Alice', 'Steven', 'Neesham', 'Chris', 'Alice'],
    'Age':  [19, None, 18, 21, None],
    'Income($)': [4000, 5000, None, 3500, None],
    'Expense($)': [3000, 2000, 2500, 25000, None]

})

print(data)

Resultado:

      Name   Age  Income($)  Expense($)
0    Alice  19.0     4000.0      3000.0
1   Steven   NaN     5000.0      2000.0
2  Neesham  18.0        NaN      2500.0
3    Chris  21.0     3500.0     25000.0
4    Alice   NaN        NaN         NaN

Pandas soltam linhas com NaN usando o método DataFrame.notna()

O método DataFrame.notna() devolve um objecto booleano com o mesmo número de linhas e colunas que o DataFrame do autor da chamada. Se um elemento não é NaN, é mapeado para o valor True no objecto booleano, e se um elemento é um NaN, é mapeado para o valor False.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame({
    'Name': ['Alice', 'Steven', 'Neesham', 'Chris', 'Alice'],
    'Age':  [19, None, 18, 21, None],
    'Income($)': [4000, 5000, None, 3500, None],
    'Expense($)': [3000, 2000, 2500, 25000, None]

})
print("Initial DataFrame:")
print(data)

print("")

data = data[data['Income($)'].notna()]
print("DataFrame after removing rows with NaN value in Income Field:")
print(data)

Resultado:

Initial DataFrame:
      Name   Age  Income($)  Expense($)
0    Alice  19.0     4000.0      3000.0
1   Steven   NaN     5000.0      2000.0
2  Neesham  18.0        NaN      2500.0
3    Chris  21.0     3500.0     25000.0
4    Alice   NaN        NaN         NaN

DataFrame after removing rows with NaN value in Income Field:
     Name   Age  Income($)  Expense($)
0   Alice  19.0     4000.0      3000.0
1  Steven   NaN     5000.0      2000.0
3   Chris  21.0     3500.0     25000.0

Aqui, aplicamos o método notna() à coluna Income($), que retorna um objecto em série com valores True ou False, dependendo dos valores da coluna. Quando passamos o objecto booleano como índice à DataFrame original, só obtemos linhas sem valores NaN para a coluna Income($).

Pandas Soltar linhas apenas com valores NaN para todas as colunas usando o método DataFrame.dropna()

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame({
    'Id': [621, 645, 210, 345, None],
    'Age':  [19, None, 18, 21, None],
    'Income($)': [4000, 5000, None, 3500, None],
    'Expense($)': [3000, 2000, 2500, 25000, None]

})
print("Initial DataFrame:")
print(data)

print("")

data = data.dropna(how='all')
print("DataFrame after removing rows with NaN value in All Columns:")
print(data)

Resultado:

Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN

DataFrame after removing rows with NaN value in All Columns:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0

Remove apenas as linhas com valores NaN para todos os campos da DataFrame. Definimos how='all' em dropna() método para deixar cair a linha do método apenas se todos os valores da coluna para a linha forem NaN.

Pandas Soltar linhas apenas com valores NaN para uma coluna particular usando o método DataFrame.dropna()

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame({
    'Id': [621, 645, 210, 345, None],
    'Age':  [19, None, 18, 21, None],
    'Income($)': [4000, 5000, None, 3500, None],
    'Expense($)': [3000, 2000, 2500, 25000, None]

})
print("Initial DataFrame:")
print(data)

print("")

data = data.dropna(subset=["Id"])
print("DataFrame after removing rows with NaN value in Id Column:")
print(data)

Resultado:

Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN

DataFrame after removing rows with NaN value in Id Column:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0

Deixa cair todas as colunas da DataFrame, que têm valor NaN apenas na Coluna Id.

Linhas de Pandas com valores NaN para qualquer coluna utilizando DataFrame.dropna() Método

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame({
    'Id': [621, 645, 210, 345, None],
    'Age':  [19, None, 18, 21, None],
    'Income($)': [4000, 5000, None, 3500, None],
    'Expense($)': [3000, 2000, 2500, 25000, None]

})
print("Initial DataFrame:")
print(data)

print("")

data = data.dropna()
print("DataFrame after removing rows with NaN value in any column:")
print(data)

Resultado:

Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN

DataFrame after removing rows with NaN value in any column:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
3  345.0  21.0     3500.0     25000.0

Por defeito, o método dropna() removerá toda a linha que tenha pelo menos um valor NaN.

Artigo relacionado - Pandas DataFrame Row

  • Como obter a contagem de filas de um Pandas DataFrame
  • Como embaralhar aleatoriamente linhas DataFrame em Pandas
  • Como filtrar linhas de dados com base nos valores das colunas em Pandas
  • Como Iterar Através de Linhas de um DataFrame em Pandas
  • Como obter índice de todas as linhas cuja coluna específica satisfaz dada a condição em Pandas
  • Obter a Primeira Fila de Pandas de Dataframe
  • Artigo relacionado - Pandas NaN

  • Como substituir todos os valores de NaN por zeros em uma coluna de dados de PandasFrame
  • Como Verificar se o NaN Existe em Pandas DataFrame
  • Coluna Pandas fillna