Replace Nan value in dataframe with a string

Asked

Viewed 1,662 times

0

Hello, I’m developing a small Dataframe that stores the name and symbol of some acids. I have already made the code that generates Dataframe as two separate series and concatenate them in the DF variable.

But I wanted to know how to insert a string in a specific position of that Dataframe?

For example, how to replace row 6, column Acid Formulas with a string that will contain a generic formula?

import pandas as pd
from pandas import Series,DataFrame





NomesdosÁcidos=pd.Series(["Ácido Permangânico", "Ácidos Fosforoso",
                          "Ácido Oxálico", "Ácido Sulforoso",
                          "Ácido Arsênico",
                          "Ácido ortossilícico", "Ácido Fosfórico", "Ácido nitroso", "Ácido nítrico",
                          "Ácido hipofosforoso", "Ácido pirofosfórico",
                          "Ácido cloroso"
                          "Ácido perlórico", "Ácido clórico","Ácido Sulfúrico"])
NomesdosÁcidos


FórmulasdosÁcidos=pd.Series(["H\N{Subscript Three}PO\N{Subscript Three}",
                             "HMnO\N{Subscript Four}", 
                             "H\N{Subscript Two}C\N{Subscript Two}O\N{Subscript Four}",
                             "H\N{Subscript Two}SO\N{Subscript Three}",
                             "H\N{Subscript Three}AsO\N{Subscript Four}",
                             "Si(OH)\N{Subscript Four}"])
FórmulasdosÁcidos

df = DataFrame({"Nomes dos Ácidos": NomesdosÁcidos, "Fórmulas dos Ácidos": FórmulasdosÁcidos})
df


df.isnull() # Mostra quantos elementos estão faltando no dataFrame
df.isnull().sum() # Soma a quantidade de elementos faltantes em cada coluna


--------------------------------------------------------------------------

#Solução para o problema 



    df.isnull() # Mostra quantos elementos estão faltando no dataFrame
    df.isnull().sum() # Soma a quantidade de elementos faltantes em cada coluna
    df.loc[[6], 'Fórmulas dos Ácidos'] = 'H\N{Subscript Three}PO\N{Subscript Four}' # O método df.loc substitui um valor da linha e da coluna especificada pela variável atribuída pelo usuário. 
    df.loc[[7], 'Fórmulas dos Ácidos'] = 'HNO\N{Subscript Two}'
    df.loc[[8,9], 'Fórmulas dos Ácidos'] = 'formula 1', 'formula2'
 # Pode ser feito mais de uma vez em sequência.

1 answer

1


Answering the question title, you can use the method fillna:

...
df = df.fillna('fórmula genérica')
...

Or:

...
df.fillna('fórmula genérica', inplace=True) # atribui o novo valor ao df teres de lhe atribuir explicitamente o valor
...

Output:

   Fórmulas dos Ácidos              Nomes dos Ácidos
0                H₃PO₃            Ácido Permangânico
1                HMnO₄              Ácidos Fosforoso
2               H₂C₂O₄                 Ácido Oxálico
3                H₂SO₃               Ácido Sulforoso
4               H₃AsO₄                Ácido Arsênico
5              Si(OH)₄           Ácido ortossilícico
6     fórmula genérica               Ácido Fosfórico
7     fórmula genérica                 Ácido nitroso
8     fórmula genérica                 Ácido nítrico
9     fórmula genérica           Ácido hipofosforoso
10    fórmula genérica           Ácido pirofosfórico
11    fórmula genérica  Ácido clorosoÁcido perlórico
12    fórmula genérica                 Ácido clórico
13    fórmula genérica               Ácido Sulfúrico

Responding to the problem itself, to edit only on one(s) line(s):

...
df.loc[[6,7], 'Fórmulas dos Ácidos'] = 'formula 1' # substuir as linhas 6 e 7
...
  • But then it would replace everything that was Nan by the same formula, it is possible for me to manually replace each index with the same method?

  • 1

    I edited @Caiovinicius

  • 1

    I’m going to test this method df.Loc! seems to be exactly what I needed. : ) I’ve edited

  • 1

    Got ! : D !

  • Helped a lot, how do I accept it? : ) I’m new to stackoverflow

  • 1

    I think I figured out how to do it, hahah. Thank you Miguel!

  • 1

    That’s right @Caiovinicius. Welcome

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.