1. 首页
  2. Python

通过一个案例告诉你,numpy dtype-无法理解的数据类型

“u003Cdivu003Eu003Cpu003Eu003Cstrongu003E我有一个数据框,正在查看与每一列关联的数据类型。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E当我跑步时:u003Cu002Fpu003Eu003Cpreu003EIn [23]: df.dtype.descru003Cbru003EOut [24]: [(u’date’, ‘<i8′), (u’open’, ‘<f8′), (u’high’, ‘<f8′), (u’low’, ‘<f8′), (u’close’, ‘<f8′), (u’volume’, ‘<f8′), (u’dividend’, ‘<f8′), (u’adj_factor’, ‘<f8′), (u’split_factor’, ‘<f8′), (u’liq’, ‘<f8′), (u’currency’, ‘|O’)]u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E我想将货币dtype设置为S7。我在做:u003Cu002Fpu003Eu003Cpreu003EIn [25]: dtype_new[-1] = (u’currency’, “|S7″)u003Cbru003EIn [26]: print dtype_newu003Cbru003EOut [27]: [(u’date’, ‘<i8′), (u’open’, ‘<f8′), (u’high’, ‘<f8′), (u’low’, ‘<f8′), (u’close’, ‘<f8′), (u’volume’, ‘<f8′), (u’dividend’, ‘<f8′), (u’adj_factor’, ‘<f8′), (u’split_factor’, ‘<f8′), (u’liq’, ‘<f8′), (u’currency’, ‘|S7’)]u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E它看起来是正确的格式。因此,我尝试将其放回我的df:u003Cu002Fpu003Eu003Cpreu003EIn [28]: df = df.astype(np.dtype(dtype_new))u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E我得到错误:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003ETypeError(‘data type not understood’,)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E我应该改变什么?在我最近更新anaconda之前,此方法已经起作用,并且我不知道该问题。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E调整:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Edf.dtype是u003Cu002Fpu003Eu003Cpreu003EIn [23]: records.dtypeu003Cbru003EOut[23]: dtype((numpy.record, [(u’date’, ‘<i8′), (u’open’, ‘<f8′), (u’high’, ‘<f8′), (u’low’, ‘<f8′), (u’close’, ‘<f8′), (u’volume’, ‘<f8′), (u’dividend’, ‘<f8′), (u’adj_factor’, ‘<f8′), (u’split_factor’, ‘<f8′), (u’liq’, ‘<f8′), (u’currency’, ‘O’)]))u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E如何将“ 0”更改为少于7个字符的字符串?u003Cu002Fpu003Eu003Cpu003E如何将最后一个dtype从’O’更改为其他内容?特别是少于7个字符的字符串。u003Cu002Fpu003Eu003Cpu003E最后-这是unicode问题吗?使用Unicode:u003Cu002Fpu003Eu003Cpreu003EIn [38]: np.dtype([(u’date’, ‘<i8′)]) u003Cbru003E …: u003Cbru003E —————————————————————————u003Cbru003ETypeError Traceback (most recent call last)u003Cbru003E<ipython-input-38-8702f0c7681f> in <module>()u003Cbru003E—-> 1 np.dtype([(u’date’, ‘<i8’)])u003Cbru003ETypeError: data type not understoodu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E没有Unicode:u003Cu002Fpu003Eu003Cpreu003EIn [39]: np.dtype([(‘date’, ‘<i8’)])u003Cbru003EOut[39]: dtype([(‘date’, ‘<i8′)])u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fdfic-imagehandleru002Faa95c9b9-a6fb-4753-904c-15bce963c6f1″ img_width=”1200″ img_height=”851″ alt=”通过一个案例告诉你,numpy dtype-无法理解的数据类型” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E下面我们看一下解决方案:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E看来您已将unicode的重点放在了中心,实际上,您似乎触及到了一个痛处。u003Cu002Fpu003Eu003Cpu003E让我们从最后的numpy文档开始。u003Cu002Fpu003Eu003Cpu003E文档dtypes 指出:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E[(field_name, field_dtype, field_shape), …]u003Cu002Fpu003Eu003Cpu003Eobj应该是一个字段列表,其中每个字段由长度为2或3的元组描述。(等效descr于__array_interface__属性中的项目。)u003Cu002Fpu003Eu003Cpu003E第一个元素field_name是字段名(如果是”,则分配标准字段名’f#’)。字段名称也可以是2个字符串的字符串,其中第一个字符串是“ title”(可以是任何字符串或unicode字符串)或该字段的元数据(可以是任何对象),第二个字符串是“名称”,必须是有效的Python标识符。第二个元素field_dtype可以是任何可以解释为数据类型的元素。可选的第三个元素field_shape如果此字段表示第二个元素中的数据类型数组,则包含形状。请注意,第三个参数等于1的3元组等效于2个元组。此样式在dtype构造函数中不接受align,因为假定所有内存均由数组接口描述解决。u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E因此,该文档似乎并未真正指定该字段名称是否可以是unicode,因此可以从该文档中确定,如果我们将一个元组定义为该字段名称,例如((u’date’, ‘date’), ‘<i8′),则使用unicode作为“ title”(注意,仍然没有名称!),不会导致任何错误。u003Cu002Fpu003Eu003Cpu003E否则,在这种情况下,如果定义((u’date’, u’date’), ‘<i8′),也会出现错误。u003Cu002Fpu003Eu003Cpu003E现在,您可以在Py2中使用Unicode名称,方法是使用 encode(“ascii”)u003Cu002Fpu003Eu003Cpreu003E(u’date’.encode(“ascii”)) u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002Fe0f1ae04-be97-4f5c-b45b-4fbaa7e42491″ img_width=”1200″ img_height=”898″ alt=”通过一个案例告诉你,numpy dtype-无法理解的数据类型” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E这应该工作。u003Cu002Fpu003Eu003Cpu003E重要的一点是,对于Py2,Numpy不允许dtype使用unicode字段名称指定为元组列表,但允许使用字典。u003Cu002Fpu003Eu003Cpu003E如果我在Py2中不使用Unicode名称,则可以将最后一个字段从更改为|0,|S7否则,encode(“ascii”)如果将名称定义为Unicode字符串,则必须使用。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E还有涉及的错误…u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E要了解为什么会发生您所看到的事情,查看Numpy和Pandas中报告的错误u002F问题以及相关讨论会很有用。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Enumpyu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Ehttps:u002Fu002Fgithub.comu002Fnumpyu002Fnumpyu002Fissuesu002F2407u003Cu002Fpu003Eu003Cpu003E您可以在讨论中注意到(我不在这里报告),主要有两点:u003Cu002Fpu003Eu003Cpu003E“问题”已经持续了一段时间u003Cu002Fpu003Eu003Cpu003E人们使用的一个技巧是encode(“ascii”)在unicode字符串上使用u003Cu002Fpu003Eu003Cpu003E请记住,’whatever’在Py2 u002F 3 中,字符串具有不同的默认值(字节u002F Unicode)u003Cu002Fpu003Eu003Cpu003E@hpaulj本人在该问题报告中很好地评论说:u003Cemu003E“如果dtype规范属于元组类型列表,它将检查u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cemu003E每个名称是否是字符串(由py2或3定义),但是如果dtype规范是字典{‘names’:[ alist], u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cemu003E’formats’:[alist]…},则py2大小写也允许使用unicode名称”u003Cu002Femu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E熊猫u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E在熊猫方面,也有报道涉及一个与numpy问题有关的问题:https : u002Fu002Fgithub.comu002Fpandas-devu002Fpandasu002Fpullu002F13462u003Cu002Fpu003Eu003Cpu003E似乎不久前已经解决。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fdfic-imagehandleru002Fbe1f737f-aa3b-41a2-86c1-254015ecd875″ img_width=”1200″ img_height=”765″ alt=”通过一个案例告诉你,numpy dtype-无法理解的数据类型” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:通过一个案例告诉你,numpy dtype-无法理解的数据类型

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/12836.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code