Почему этот ряд панд представлен сериями? - PullRequest
0 голосов
/ 21 мая 2018

Я не совсем понимаю, как ряды панд (из фрейма данных) могут быть представлены рядами.

Я понимаю, что базовое представление рядов панд - это пустой массив.Это означает массив с однородными значениями.Я понимаю, почему столбец pandas в dataframe представлен сериями (столбец dataframe представляет некоторый атрибут для разных объектов, то есть значения этого атрибута принадлежат к одному и тому же типу данных).

Но как получается, что строка в этом кадре (т.е. набор потенциально разных атрибутов с разными типами данных) может быть представлен сериями?

Я просто предполагаю, что значения всех этих разных атрибутов представлены более абстрактным типом данных, таким как «объект» и базовый (однородный) массив numpy - это массив объектов.

Может кто-нибудь подтвердить, что мое понимание верно?

Спасибо

Томас

1 Ответ

0 голосов
/ 21 мая 2018

Внутренне pandas представляет каждую серию или столбец данных с конкретным типом данных или dtype:

df = pd.DataFrame([[2, True, 3.5, 'hello'], [4, False, 5.12, 'again']])

print(df)

   0      1     2      3
0  2   True  3.50  hello
1  4  False  5.12  again

print(df.dtypes)

0      int64
1       bool
2    float64
3     object
dtype: object

Когда вы запрашиваете строкуДля данных, которые содержат смешанные типы, pandas выполняет явное преобразование для создания серии dtype=object.Такая серия может содержать практически все:

# extract first row
print(df.iloc[0])

0        2
1     True
2      3.5
3    hello
Name: 0, dtype: object

Обратите внимание, что в этой серии object много разных типов.Для эффективности вы должны стремиться выполнять операции над сериями, которые содержатся в смежных блоках памяти.Это относится к сериям int, float, datetime и bool, но не относится к сериям object, которые содержат указатели на данные, а не на сами данные.

Вы можете получить массив numpy из вашей серии:

print(df.iloc[0].values)

array([2, True, 3.5, 'hello'], dtype=object)

Но это не то же самое , как у обычной серии:

Создание массива с dtype=object отличается.Память, занятая массивом, теперь заполнена указателями на объекты Python, которые хранятся в другом месте в памяти (подобно тому, как список Python на самом деле представляет собой просто список указателей на объекты, а не сами объекты).

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