Search code examples
pythonpandasdata-processing

Python Pandas replace values by their opposite sign


I am trying to "clean" some data. I have values which are negative, which they cannot be. And I would like to replace all values that are negative to their corresponding positive values.

A    | B     | C
-1.9 | -0.2  | 'Hello'
1.2  | 0.3   | 'World'

I would like this to become

A    | B     | C
1.9  | 0.2   | 'Hello'
1.2  | 0.3   | 'World'

As of now I have just begun writing the replace statement

df.replace(df.loc[(df['A'] < 0) & (df['B'] < 0)],df * -1,inplace=True)

Please help me in the right direction


Solution

  • Just call abs:

    In [349]:
    
    df = df.abs()
    df
    Out[349]:
         A    B
    0  1.9  0.2
    1  1.2  0.3
    

    Another method would be to create a boolean mask, drop the NaN rows, call loc on the index and assign the negative values:

    df.loc[df[df<0].dropna().index] = -df
    

    EDIT

    For the situation where you have strings the following would work:

    In [399]:
    
    df[df.columns[df.dtypes != np.object]] = df[df.columns[df.dtypes != np.object]].abs()
    df
    Out[399]:
         A    B      C
    0  1.9  0.2  Hello
    1  1.2  0.3  World