python - usar - obter lista de colunas do dataframe do pandas com base no tipo de dados




remover linhas duplicadas pandas (7)

A maneira mais direta de obter uma lista de colunas de certos dtype, por exemplo, 'object':

df.select_dtypes(include='object').columns

Por exemplo:

>>df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>df.dtypes

A      int64
B    float64
C     object
D     object
E      int64
dtype: object

Para obter todas as colunas dtype 'object':

>>df.select_dtypes(include='object').columns

Index(['C', 'D'], dtype='object')

Apenas para a lista:

>>list(df.select_dtypes(include='object').columns)

['C', 'D']   

Se eu tiver um dataframe com as seguintes colunas:

1. NAME                                     object
2. On_Time                                      object
3. On_Budget                                    object
4. %actual_hr                                  float64
5. Baseline Start Date                  datetime64[ns]
6. Forecast Start Date                  datetime64[ns] 

Eu gostaria de poder dizer: aqui é um dataframe, me dá uma lista das colunas que são do tipo Object ou do tipo DateTime?

Eu tenho uma função que converte números (Float64) para duas casas decimais, e gostaria de usar essa lista de colunas de dataframe, de um tipo específico, e executá-lo através desta função para convertê-los todos para 2dp.

Talvez:

For c in col_list: if c.dtype = "Something"
list[]
List.append(c)?

A partir dos pandas v0.14.1, você pode utilizar select_dtypes() para selecionar colunas por dtipo

In [2]: df = pd.DataFrame({'NAME': list('abcdef'),
    'On_Time': [True, False] * 3,
    'On_Budget': [False, True] * 3})

In [3]: df.select_dtypes(include=['bool'])
Out[3]:
  On_Budget On_Time
0     False    True
1      True   False
2     False    True
3      True   False
4     False    True
5      True   False

In [4]: mylist = list(df.select_dtypes(include=['bool']).columns)

In [5]: mylist
Out[5]: ['On_Budget', 'On_Time']

Se você quiser uma lista de colunas de um certo tipo, você pode usar o groupby :

>>> df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>> df
   A       B  C  D   E
0  1  2.3456  c  d  78

[1 rows x 5 columns]
>>> df.dtypes
A      int64
B    float64
C     object
D     object
E      int64
dtype: object
>>> g = df.columns.to_series().groupby(df.dtypes).groups
>>> g
{dtype('int64'): ['A', 'E'], dtype('float64'): ['B'], dtype('O'): ['C', 'D']}
>>> {k.name: v for k, v in g.items()}
{'object': ['C', 'D'], 'int64': ['A', 'E'], 'float64': ['B']}

Usando dtype lhe dará o tipo de dados da coluna desejada:

dataframe['column1'].dtype

Se você quiser saber os tipos de dados de toda a coluna de uma só vez , você pode usar plural de dtype como dtypes :

dataframe.dtypes

para yoshiserry;

def col_types(x,pd):
    dtypes=x.dtypes
    dtypes_col=dtypes.index
    dtypes_type=dtypes.value
    column_types=dict(zip(dtypes_col,dtypes_type))
    return column_types

use df.info() onde df é um pandas datafarme


df.select_dtypes(['object'])

Isso deve fazer o truque





pandas