Строки в фрейме данных, но 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?
1 ответ:
объект dtype происходит от NumPy, он описывает тип элемента в ndarray. Каждый элемент в ndarray должен иметь одинаковый размер в байтах. Для int64 и float64 они составляют 8 байт. Но для строк, длина строки не фиксируется. Поэтому вместо того, чтобы сохранять байты строк в ndarray напрямую, панды используют объект ndarray, который сохраняет указатели на объекты, из-за этого dtype такого рода ndarray является объектом.
вот пример:
- в массив int64 содержит 4 значения int64.
- массив объектов содержит 4 указателя на 3 строковых объектов.

Comments