Строки в фрейме данных, но dtype-это объект



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



это мой фрейм данных:



<class 'pandas.core.frame.DataFrame'>
Int64Index: 56992 entries, 0 to 56991
Data columns (total 7 columns):
id 56992 non-null values
attr1 56992 non-null values
attr2 56992 non-null values
attr3 56992 non-null values
attr4 56992 non-null values
attr5 56992 non-null values
attr6 56992 non-null values
dtypes: int64(2), object(5)


пять из них dtype object. Я явно преобразую эти объекты в строки:



for c in df.columns:
if df[c].dtype == object:
print "convert ", df[c].name, " to string"
df[c] = df[c].astype(str)


затем, df["attr2"] еще dtype object, хотя type(df["attr2"].ix[0] показывает str, что верно.



панды различие между int64 и float64 и object. Что? логика это когда нет dtype str? Почему это str охватываются object?

549   1  

1 ответ:

объект dtype происходит от NumPy, он описывает тип элемента в ndarray. Каждый элемент в ndarray должен иметь одинаковый размер в байтах. Для int64 и float64 они составляют 8 байт. Но для строк, длина строки не фиксируется. Поэтому вместо того, чтобы сохранять байты строк в ndarray напрямую, панды используют объект ndarray, который сохраняет указатели на объекты, из-за этого dtype такого рода ndarray является объектом.

вот пример:

  • в массив int64 содержит 4 значения int64.
  • массив объектов содержит 4 указателя на 3 строковых объектов.

enter image description here

Comments

    Ничего не найдено.