Supponendo che la dataframe è completamente di tipo numerico:
si può provare:
>>> df = df.loc[:, df.var() == 0.0]
che rimuoverà costante colonne (cioè varianza = 0.).
Se la dataframe è di tipo sia numerica e oggetto, quindi si dovrebbe provare:
>>> enum_df = df.select_dtypes(include=['object'])
>>> num_df = df.select_dtypes(exclude=['object'])
>>> num_df = num_df.loc[:, num_df.var() == 0.0]
>>> df = pd.concat([num_df, enum_df], axis=1)
che cadrà colonne continue di solo tipo numerico.
Se anche voi volete ignorare/eliminare colonne enum costanti, si dovrebbe provare:
>>> enum_df = df.select_dtypes(include=['object'])
>>> num_df = df.select_dtypes(exclude=['object'])
>>> enum_df = enum_df.loc[:, [True if y !=1 else False for y in [len(np.unique(x, return_counts=True)[-1]) for x in enum_df.T.as_matrix()]]]
>>> num_df = num_df.loc[:, num_df.var() == 0.0]
>>> df = pd.concat([num_df, enum_df], axis=1)
Aargh a: '<>'. –
@AndyHayden Le abitudini Pascal sono dure a morire. L'ho cambiato – chthonicdaemon
+1 grazie per il cambio. Questo cortocircuito sul any, dopo che ha già fatto il confronto! = Su ogni elemento, quindi la soluzione del DSM sarà probabilmente più efficiente ... chiedo se la migliore soluzione di corto circuito. –