pandas, як перевірити dtype для всіх стовпців у фреймі даних?


85

Здається, dtype працює лише для pandas.DataFrame.Series, так? Чи існує функція відображення типів даних усіх стовпців одночасно?

Відповіді:


157

Сингулярна форма dtypeвикористовуються для перевірки типу даних для одного стовпчика. І форма множиниdtypes призначена для кадру даних, який повертає типи даних для всіх стовпців. По суті:

Для однієї колонки :

dataframe.column.dtype

Для всіх стовпців :

dataframe.dtypes

Приклад :

import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [True, False, False], 'C': ['a', 'b', 'c']})

df.A.dtype
# dtype('int64')
df.B.dtype
# dtype('bool')
df.C.dtype
# dtype('O')

df.dtypes
#A     int64
#B      bool
#C    object
#dtype: object

3
Якщо вам потрібні всі нечислові / категоріальні стовпці, ви можете їх отримати df.dtypes[df.dtypes != 'int64'][df.dtypes != 'float64']
нішант,

2
Чи можете ви пояснити, чому стовпець C має тип об’єкта замість str?
Star Rider

@StarRider бачить цю відповідь , а також pandasдокументацію, де згадується: " Pandas використовує об'єкт dtype для зберігання рядків "
call-in-co

Будь-яка ідея, чому у мене є об'єкт як dtype?
JohnAndrews

Я не розумів, що рівність трохи нечітка з dtypes. df.C.dtypeповертається dtype('O'), але df.C.dtype=='object'це правда.
Teepeemm

8

Припустимо, df є pandas DataFrame, щоб отримати кількість ненульових значень і типів даних усіх стовпців одночасно:

df.info()

3
Правильно, але воно дасть лише підсумок. Не детально про всі стовпці.
Nabin

1

Щоб зробити ще один крок далі, я припускаю, що ви хочете щось зробити з цими dtypes. df.dtypes.to_dict()стане в нагоді.

my_type = 'float64'

dtypes = dataframe.dtypes.to_dict()

for col_nam, typ in dtypes.items():
    if (typ != my_type):
        raise ValueError(f"Yikes - `dataframe['{col_name}'].dtype == {typ}` not {my_type}")

Ви побачите, що Pandas по-справжньому добре порівнював класи NumPy та надані користувачем рядки. Наприклад: навіть такі речі, як 'double' == dataframe['col_name'].dtypeвдасться, коли .dtype==np.float64.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.