vsoler vsoler - 6 months ago 9
Python Question

Filling a DataFrame with "sign" numbers

I have a DataFrame full of floats (positive and negative) and some NaN.
I'd like to replace every single float number with its sign:

if it's NaN -> it remains Nan
if positive -> replace with 1
if negative -> replace with -1
if zero -> leave it as 0


Any suggestions to make this massive replacement?

Thank you in advance

Answer

You can use boolean indexing:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[-1,3,0,5],
                   'B':[4,5,6,5],
                   'C':[8,-9,np.nan,7]})

print (df)
   A  B    C
0 -1  4  8.0
1  3  5 -9.0
2  0  6  NaN
3  5  5  7.0
print (df > 0)
       A     B      C
0  False  True   True
1   True  True  False
2  False  True  False
3   True  True   True

print (df < 0)
       A      B      C
0   True  False  False
1  False  False   True
2  False  False  False
3  False  False  False

df[df > 0] = 1
df[df < 0] = -1

print (df)
   A  B    C
0 -1  1  1.0
1  1  1 -1.0
2  0  1  NaN
3  1  1  1.0
Comments