two concatenate concatenar columns columnas python pandas dataframe concatenation nan

concatenar - python dataframe concatenate two columns



pandas concat genera valores nan (1)

Tengo curiosidad de por qué una simple concatenación de dos marcos de datos en pandas:

shape: (66441, 1) dtypes: prediction int64 dtype: object isnull().sum(): prediction 0 dtype: int64 shape: (66441, 1) CUSTOMER_ID int64 dtype: object isnull().sum() CUSTOMER_ID 0 dtype: int64

De la misma forma y ambos sin valores NaN.

foo = pd.concat([initId, ypred], join=''outer'', axis=1) print(foo.shape) print(foo.isnull().sum())

puede resultar en una gran cantidad de valores de NaN si se unen.

(83384, 2) CUSTOMER_ID 16943 prediction 16943

¿Cómo puedo solucionar este problema y evitar que se introduzcan valores de NaN?

Tratando de reproducirlo como

aaa = pd.DataFrame([0,1,0,1,0,0], columns=[''prediction'']) print(aaa) bbb = pd.DataFrame([0,0,1,0,1,1], columns=[''groundTruth'']) print(bbb) pd.concat([aaa, bbb], axis=1)

falló, por ejemplo, funcionó bien, ya que no se introdujeron valores de NaN.


Creo que hay un problema con diferentes valores de índice, por lo que donde concat no puede alinearse, obtenga NaN :

aaa = pd.DataFrame([0,1,0,1,0,0], columns=[''prediction''], index=[4,5,8,7,10,12]) print(aaa) prediction 4 0 5 1 8 0 7 1 10 0 12 0 bbb = pd.DataFrame([0,0,1,0,1,1], columns=[''groundTruth'']) print(bbb) groundTruth 0 0 1 0 2 1 3 0 4 1 5 1 print (pd.concat([aaa, bbb], axis=1)) prediction groundTruth 0 NaN 0.0 1 NaN 0.0 2 NaN 1.0 3 NaN 0.0 4 0.0 1.0 5 1.0 1.0 7 1.0 NaN 8 0.0 NaN 10 0.0 NaN 12 0.0 NaN

La solución es reset_index si los valores de los índices no son necesarios:

aaa.reset_index(drop=True, inplace=True) bbb.reset_index(drop=True, inplace=True) print(aaa) prediction 0 0 1 1 2 0 3 1 4 0 5 0 print(bbb) groundTruth 0 0 1 0 2 1 3 0 4 1 5 1 print (pd.concat([aaa, bbb], axis=1)) prediction groundTruth 0 0 0 1 1 0 2 0 1 3 1 0 4 0 1 5 0 1