Предполагая, что DataFrame полностью типа числового:
вы можете попробовать:
>>> df = df.loc[:, df.var() == 0.0]
, который будет удалять столбцы постоянной (т.е. дисперсии = 0.).
Если DataFrame имеет тип как числовой и объекта, то вы должны попробовать:
>>> 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)
, которые будут падать постоянные столбцы только числового типа.
Если вы хотите игнорировать/удалить постоянные столбцы перечислений, вы должны попробовать:
>>> 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 to: '<>'. –
@ AndyHayden Паскаль привычки умереть. Я изменил его. – chthonicdaemon
+1 спасибо за изменение. Это короткие замыкания на любом, после того, как это уже сделано! = Сравнение по каждому элементу, поэтому решение DSM, вероятно, будет более эффективным ... задайтесь вопросом, лучше ли это решение с коротким замыканием. –