为了账号安全,请及时绑定邮箱和手机立即绑定

DataFrame中的字符串,但dtype是对象

DataFrame中的字符串,但dtype是对象

收到一只叮咚 2019-08-17 15:20:41
DataFrame中的字符串,但dtype是对象为什么Pandas告诉我我有对象,尽管所选列中的每个项都是一个字符串 - 即使在显式转换之后也是如此。这是我的DataFrame:<class 'pandas.core.frame.DataFrame'>Int64Index: 56992 entries, 0 to 56991Data columns (total 7 columns):id            56992  non-null valuesattr1         56992  non-null valuesattr2         56992  non-null valuesattr3         56992  non-null valuesattr4         56992  non-null valuesattr5         56992  non-null valuesattr6         56992  non-null valuesdtypes: 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?
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

dtype对象来自NumPy,它描述了ndarray中元素的类型。ndarray中的每个元素必须具有相同的字节大小。对于int64和float64,它们是8个字节。但对于字符串,字符串的长度不固定。因此,Pandas不是直接在ndarray中保存字符串的字节,而是使用对象ndarray,它保存指向对象的指针,因此这种类型的ddarray是对象。

这是一个例子:

  • int64数组包含4个int64值。

  • 对象数组包含4个指向3个字符串对象的指针。


查看完整回答
反对 回复 2019-08-17
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

Pandas使用对象dtype存储字符串。

“不要担心它;它应该是这样的。” (虽然接受的答案很好地解释了“为什么”;字符串是可变长度的)

但对于字符串,字符串的长度不固定。


查看完整回答
反对 回复 2019-08-17
  • 2 回答
  • 0 关注
  • 3504 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信