Ответ 1
df.loc[:, df.dtypes == np.float64]
Мне было интересно, есть ли элегантный и сокращенный способ в Pandas DataFrames для выбора столбцов по типу данных (dtype). т.е. выберите только столбцы Int64 из DataFrame.
Чтобы разработать, что-то вроде строк
df.select_columns(dtype=float64)
Заранее спасибо за помощь
df.loc[:, df.dtypes == np.float64]
Начиная с версии 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
df.select_dtypes(include=[np.float64])
Я хотел бы расширить существующий ответ, добавив опции для выбора всех плавающих 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
Необязательно, если вы не хотите создавать подмножество фрейма данных во время процесса, вы можете напрямую выполнить итерацию по типу данных столбца.
Я не сравнивал приведенный ниже код, предположим, что он будет быстрее, если вы будете работать с очень большим набором данных.
[col for col in df.columns.tolist() if df[col].dtype not in ['object','<M8[ns]']]
Несколько включений для выбора столбцов со списком типов для example- float64 и int64
df_numeric = df.select_dtypes(include=[np.float64,np.int64])