【问题标题】:How do I change the type of a row in an array in Python?如何在 Python 中更改数组中行的类型?
【发布时间】:2017-11-14 05:29:18
【问题描述】:

我有一个从 csv 创建的数组,但第一行包含每列的标题。它必须是一个 str,但由于大多数数据是浮动的,它现在是一个 float64。

代码是创建矩阵的以下代码:

self.data = np.genfromtxt(self.path, delimiter=",")

我需要将第一行更改为字符串,但如果我使用:

self.data[0] = self.data[0].astype(str)

它返回一行“nan”,我不明白。

谢谢。

【问题讨论】:

  • numpy 中不能有异构类型的数组。
  • object dtype 读取,然后将第二行设置为float 类型:a = np.genfromtxt(path, delimiter=",", dtype=object)a[1:] = a[1:].astype(float)?
  • 如果您不想将该文本行用作数组中的字段(列)名称,可以使用skip_header 参数跳过它。

标签: python arrays numpy types


【解决方案1】:

如果您有列名,则可以使用 names 参数将其提取出来。

import numpy as np
data = np.genfromtxt('data.csv', delimiter=",", names=True)

data

array([( 1.,  4.,  7.), ( 2.,  5.,  8.), ( 3.,  6.,  9.)], 
      dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')])

您现在可以执行data['a'] 之类的操作来获取名为'a' 的数组

您还可以使用data.dtype.names 访问列名,这将返回所有列名的元组。 ('a', 'b', 'c')

【讨论】:

    【解决方案2】:

    np.genfromtxt 函数通过获取您的数组并转换为数组的数据类型(在本例中为float64)来生成np.ndarray。当您将其转换回string 时,它已经转换为float64,因此它被读取为NaN,因为您的标题可能不是数字。

    幸运的是,该函数可以提取标题。 By using the "names" parameter:np.genfromtxt(self.path, delimiter=",", names=True),该函数还将从输入文件的第一行返回一个列标题列表。

    【讨论】:

    • 谢谢,标题更容易了。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多