Почему тип pd.DataFrame для каждого элемента является float, а dtype для pd.DataFrame - object? - PullRequest
0 голосов
/ 16 ноября 2018

results_table - это pd.DataFrame

Когда я

print(type(results_table.loc[0,'Mean recall score']))

это возврат

<class 'numpy.float64'>

Каждый предмет float

Но когда я

print(results_table['Mean recall score'].dtype)

возвращает

object

Почему такое поведение?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

В первом операторе печати вы выделяете один элемент из вашего фрейма данных.Этот единственный элемент, который вы смотрите, является плавающим.

Во втором операторе печати вы фактически вытаскиваете серию панд (то есть вы вытаскиваете весь столбец) и печатаете тип этого.

Ряд панд - это объект, но каждая запись в ряду - это число с плавающей точкой.Вот почему вы получаете результаты, которые вы сделали.

0 голосов
/ 16 ноября 2018

Первое примечание df.loc[0, x] учитывает только значение в метке строки 0 и метке столбца x, , а не всего вашего кадра данных.Теперь давайте рассмотрим пример:

df = pd.DataFrame({'A': [1.5, 'hello', 'test', 2]}, dtype=object)

print(type(df.loc[0, 'A']))  # type of single element in series

<class 'float'>

print(df['A'].dtype)         # type of series

object

Как видите, серия object dtype может содержать произвольные объекты Python.Вы можете даже, если хотите, извлечь тип каждого элемента вашей серии:

print(df['A'].map(type))

0    <class 'float'>
1      <class 'str'>
2      <class 'str'>
3      <class 'int'>
Name: A, dtype: object

* object dtype - это просто набор указателей на различные объекты , а не .в непрерывном блоке памяти, как это может быть в случае с числовыми рядами.Это сравнимо с Python list и объясняет, почему производительность низкая, когда вы работаете с object вместо числовых рядов.

См. Также этот ответ для визуального представления вышеизложенного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...