Внутренне 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 на самом деле представляет собой просто список указателей на объекты, а не сами объекты).