当前位置: 首页 > 面试题库 >

当第一列是字符串而其余列是数字时,如何使用numpy.genfromtxt?

经国安
2023-03-14
问题内容

基本上,我有一堆数据,其中第一列是字符串(标签),其余列是数值。我运行以下命令:

data = numpy.genfromtxt('data.txt', delimiter = ',')

这样可以很好地读取大多数数据,但是label列只是获取“ nan”。我该如何处理?


问题答案:

默认情况下,np.genfromtxt使用dtype=float:这就是将字符串列转换为NaN的原因,因为毕竟它们不是数字…

您可以使用以下方法np.genfromtxt来尝试猜测列的实际类型dtype=None

>>> from StringIO import StringIO
>>> test = "a,1,2\nb,3,4"
>>> a = np.genfromtxt(StringIO(test), delimiter=",", dtype=None)
>>> print a
array([('a',1,2),('b',3,4)], dtype=[('f0', '|S1'),('f1', '<i8'),('f2', '<i8')])

您可以使用它们的名称访问列,例如a['f0']

dtype=None如果您不知道列应该是什么,那么使用是一个好技巧。如果您已经知道它们应具有的类型,则可以给出一个明确的dtype。例如,在测试中,我们知道第一列是字符串,第二列是int,我们希望第三列是浮点数。然后,我们将使用

>>> np.genfromtxt(StringIO(test), delimiter=",", dtype=("|S10", int, float))
array([('a', 1, 2.0), ('b', 3, 4.0)], 
      dtype=[('f0', '|S10'), ('f1', '<i8'), ('f2', '<f8')])

建议使用显式dtype方式,比使用显式方式有效得多dtype=None

在这两种情况下(dtype=None或显式,非均质dtype),您最终都会得到结构化数组。

[注意:使用dtype=None,第二次解析输入,并且更新各列的类型以匹配可能的更大类型:首先我们尝试使用bool,然后是int,然后是浮点数,然后是复数,然后保留字符串如果其他所有方法都失败了。实际上,该实现相当笨拙。已经进行了一些尝试来使类型猜测更有效(使用regexp),但到目前为止还没有任何问题]



 类似资料:
  • 我有一个包含两列的antd表,第一列需要过滤,第二列需要搜索文本。 根据我的代码,应用程序呈现良好。请注意,tags字段是一个json数组,而不是文本字段,所以我想这与错误有关。 更新1代码。 然而,当我添加这一行: 然后我得到这个错误 更新2 这是容器组件

  • 我有一个文本包含一些我想要标记的单词,要标记的单词包含在一个列表中。问题是其中一些单词是其他单词的子字符串,但我想从列表中标记最长的可识别字符串。 例如,如果我的文本是“foo和bar不同于foo bar。”我的列表包含“foo”、“bar”和“foo bar”,结果应该是“[tag]foo[/tag]和[tag]bar[/tag]不同于[tag]foo bar[/tag]。”

  • 我应该如何修改.jsp文件上的表单以提交包含不是字符串而是类别的字段的word对象?就整个情况而言,让我展示由提交调用的控制器中的方法: 我有一种感觉,我应该使用@InitBinder方法,但我不知道如何使用,这更像是一种感觉,而不是坚如磐石的事实。欢迎任何建议。

  • 问题内容: 样本数据: 我使用以下查询将’ ‘’分隔的字符串分成几行: 我的查询存在问题,我不想为每个拆分的电子邮件地址创建新行-我想为其添加新列。 email_address列中最多有3个单独的电子邮件地址。有什么建议?如果它的大小超过3,最好是答案可以占n列。 问题答案: 测试数据 询问 结果

  • 我正在学习如何使用Spring靴和胸腺嘧啶。我有一个问题,我在表单列表中提供一个特定对象的列表到一个Thymeleaf页面。当用户选择值并发布结果时,结果是所选对象的字符串,并且与我想要存储值的对象不兼容。 这可能听起来像一口,所以下面是代码。 输入:一个类将一组成分传递给表单,这个类在一个类成分列表中传递给表单(过滤对此无关紧要--插入一个列表作为model属性的值,键是一种成分类型) Thym

  • 问题内容: 在Java中,有没有一种方法可以确定字符串的第一个字符是否为数字? 一种方法是 并一直执行到9点,但这似乎效率很低。 问题答案: 请注意,这将允许使用 任何 Unicode数字 ,而不仅仅是0-9。您可能更喜欢: 或较慢的正则表达式解决方案: 但是,使用这些方法中的任何一种,必须首先确保该字符串不为空。如果是,而且将引发。没有这个问题。 要使整个条件只占一行,并避免长度检查,可以将正则