Подтвердить что ты не робот

Выбор столбцов Pandas по dtype

Мне было интересно, есть ли элегантный и сокращенный способ в Pandas DataFrames для выбора столбцов по типу данных (dtype). т.е. выберите только столбцы Int64 из DataFrame.

Чтобы разработать, что-то вроде строк

df.select_columns(dtype=float64)

Заранее спасибо за помощь

4b9b3361

Ответ 1

df.loc[:, df.dtypes == np.float64]

Ответ 2

Начиная с версии 0.14.1 существует select_dtypes, поэтому вы можете сделать это более элегантно/вообще.

In [11]: df = pd.DataFrame([[1, 2.2, 'three']], columns=['A', 'B', 'C'])

In [12]: df.select_dtypes(include=['int'])
Out[12]:
   A
0  1

Для выбора всех числовых типов используется numpy dtype numpy.number

In [13]: df.select_dtypes(include=[np.number])
Out[13]:
   A    B
0  1  2.2

In [14]: df.select_dtypes(exclude=[object])
Out[14]:
   A    B
0  1  2.2

Ответ 3

df.select_dtypes(include=[np.float64])

Ответ 4

Я хотел бы расширить существующий ответ, добавив опции для выбора всех плавающих dtypes или всех целочисленных dtypes:

Демо-версия:

np.random.seed(1234)

df = pd.DataFrame({
        'a':np.random.rand(3), 
        'b':np.random.rand(3).astype('float32'), 
        'c':np.random.randint(10,size=(3)).astype('int16'),
        'd':np.arange(3).astype('int32'), 
        'e':np.random.randint(10**7,size=(3)).astype('int64'),
        'f':np.random.choice([True, False], 3),
        'g':pd.date_range('2000-01-01', periods=3)
     })

выходы:

In [2]: df
Out[2]:
          a         b  c  d        e      f          g
0  0.191519  0.785359  6  0  7578569  False 2000-01-01
1  0.622109  0.779976  8  1  7981439   True 2000-01-02
2  0.437728  0.272593  0  2  2558462   True 2000-01-03

In [3]: df.dtypes
Out[3]:
a           float64
b           float32
c             int16
d             int32
e             int64
f              bool
g    datetime64[ns]
dtype: object

Выбор всех столбцов с плавающей точкой:

In [4]: df.select_dtypes(include=['floating'])
Out[4]:
          a         b
0  0.191519  0.785359
1  0.622109  0.779976
2  0.437728  0.272593

In [5]: df.select_dtypes(include=['floating']).dtypes
Out[5]:
a    float64
b    float32
dtype: object

Выбор всех столбцов целых чисел:

In [6]: df.select_dtypes(include=['integer'])
Out[6]:
   c  d        e
0  6  0  7578569
1  8  1  7981439
2  0  2  2558462

In [7]: df.select_dtypes(include=['integer']).dtypes
Out[7]:
c    int16
d    int32
e    int64
dtype: object

Выбор всех числовых столбцов:

In [8]: df.select_dtypes(include=['number'])
Out[8]:
          a         b  c  d        e
0  0.191519  0.785359  6  0  7578569
1  0.622109  0.779976  8  1  7981439
2  0.437728  0.272593  0  2  2558462

In [9]: df.select_dtypes(include=['number']).dtypes
Out[9]:
a    float64
b    float32
c      int16
d      int32
e      int64
dtype: object

Ответ 5

Необязательно, если вы не хотите создавать подмножество фрейма данных во время процесса, вы можете напрямую выполнить итерацию по типу данных столбца.

Я не сравнивал приведенный ниже код, предположим, что он будет быстрее, если вы будете работать с очень большим набором данных.

[col for col in df.columns.tolist() if df[col].dtype not in ['object','<M8[ns]']] 

Ответ 6

Несколько включений для выбора столбцов со списком типов для example- float64 и int64

df_numeric = df.select_dtypes(include=[np.float64,np.int64])