Как отфильтровать и узнать все столбцы определенного типа данных в фрейме данных pandas?

#python #pandas

Вопрос:

Пусть у меня есть фрейм данных df

  Name     Age       Job
 
 Rick     24      Worker
 Max      20      Worker
 Sam      48      Driver
 
 Expected output:  
                  Name
                  Job
 

Теперь я хочу распечатать тот столбец(имя), в котором есть данные типа объекта.
Вот моя попытка:

 for column in df:
    if df.dtypes(column) == 'object':
        print(column)
 

Но я получаю ошибку, которая заключается в:
«если df.dtypes(столбец) == ‘объект’: Ошибка типа: объект «Серия» не может быть вызван «

Ответ №1:

Вы можете использовать df.select_dtypes следующее:

 df.select_dtypes('object').columns.to_list()
 

Выход:

 ['Name', 'Job']
 

Или:

 for column in df:
    if df[column].dtype == 'object':
        print(column)

 

Ответ №2:

Вы можете использовать понимание списка:

 [x for x in df.columns if df[x].dtype == object]
 

Выход:

 ['Name', 'Job']
 

Ответ №3:

Попробуй

 df.columns[df.dtypes == object].to_list()
 

что дает

 >> ['Name', 'Job']
 

Ответ №4:

Ошибка вызвана циклом for. Попробуй:

 for column in df.columns:
    if type(column) == 'object':
        print(column)
 

Ответ №5:

Вот такая попытка:

код:

 df.dtypes[df.dtypes == 'object'].index.values
 

С принтами:

 array(['Name', 'Job'], dtype=object)
 

Для распечатки самих колонок:

 [print(val) for val in df.dtypes[df.dtypes == 'object'].index]
Name
Job
 

Ответ №6:

 import numpy as np
# Get columns whose data type is object
filteredColumns = df.dtypes[df.dtypes == np.object]
# List of columns whose data type is object
listOfColumnNames = list(filteredColumns.index)
print(listOfColumnNames)
 

Выход:

[«Имя», «Работа»]

Ответ №7:

Другой подход:

 [print(col) for col in df.select_dtypes(include = object).columns]
Name
Job