【问题标题】:np.loadtxt vs np.genfromtxtnp.loadtxt 与 np.genfromtxt
【发布时间】:2018-12-07 03:41:29
【问题描述】:

当我使用以下 np.loadtxt 代码加载格式的数据时:

2017-07-26,153.3500,153.9300,153.0600,153.5000,153.5000,12778195.00

数据加载得很好,加载txt代码->

a, b, c, d, e, f, g = np.loadtxt("goog.csv",
                                  dtype={'names': ("b'Date", 'Open', 'High', 'Low', 'Close', 'Adjusted_close', 'Volume'),
                                        'formats': ('U10', np.float, np.float, np.float, np.float, np.float, np.float)},                               
                                  delimiter=',',
                                  skiprows=1,
                                  unpack=True)
print(a)

输出->

['2017-07-26' '2017-07-25' '2017-07-24' ..., '2000-01-05' '2000-01-04'
'2000-01-03']

Process finished with exit code 0

但是在使用相应的 np.genfromtxt 代码时会出现 ValueError: too many values to unpack,我使用了以下 genfromtxt 代码->

a, b, c, d, e, f, g = np.genfromtxt('goog.csv',  
                                    dtype={'names': ("b'Date", 'Open', 'High', 'Low', 'Close', 'Adjusted_close', 'Volume'),
                                           'formats': ('U10', np.float, np.float, np.float, np.float, np.float, np.float)},
                                    delimiter=',',
                                    skip_header=1,
                                    unpack=True)
print(a)

输出->

Traceback (most recent call last):
File "C:/Users/sonika jha/PycharmProjects/csvCheck/csvCheck.py", line 84, in <module>
download_stock_data()
File "C:/Users/sonika jha/PycharmProjects/csvCheck/csvCheck.py", line 66, in download_stock_data
unpack=True)
ValueError: too many values to unpack (expected 7)

Process finished with exit code 1

我的最终目标是使用 genfromtxt 以字符串数据类型加载日期,其余的以浮点数加载。

【问题讨论】:

  • 两种情况下的输出是什么?错误是什么?
  • @sophros 进行了编辑,请查看。

标签: python-3.x numpy genfromtxt


【解决方案1】:

loadtxtgenfromtxt 以不同方式处理结构化数据的解包

loadtxt 文档:

解压:bool,可选

如果为 True,则返回的数组被转置,因此参数可能是 使用x, y, z = loadtxt(...) 解压。当与结构化的 数据类型,为每个字段返回数组。默认为 False。

genfromtxt 文档:

解压:bool,可选

如果为 True,则返回的数组被转置,因此参数可能是 使用x, y, z = loadtxt(...)解包

最后引用中的loadtxt 是一个错字。

如果我复制您的样品线 3 次,然后运行 ​​genfromtxt(使用 unpack=False):

我得到一个 (3,) 数组,其中定义了 dtype:

In [327]: data
Out[327]: 
array([('2017-07-26', 153.35, 153.93, 153.06, 153.5, 153.5, 12778195.),
       ('2017-07-26', 153.35, 153.93, 153.06, 153.5, 153.5, 12778195.),
       ('2017-07-26', 153.35, 153.93, 153.06, 153.5, 153.5, 12778195.)],
      dtype=[('bDate', '<U10'), ('Open', '<f8'), ('High', '<f8'), ('Low', '<f8'), ('Close', '<f8'), ('Adjusted_close', '<f8'), ('Volume', '<f8')])

loadtxt 产生同样的结果

但是 loadtxtunpack 最终会做

a = data['bDate`]
b = data['Open']
etc.

也就是说,为每个变量分配一个字段。

但是genfromtxt 可以

a = data[0]
b = data[1]
etc

即一维数组的一行或元素到每个变量。元素比你的 7 个变量多得多,它抱怨解包的值太多。

所以要么坚持使用loadtxt,要么不要使用unpackgenfromtxt

我认为在没有unpack 的情况下加载结构化数组可以在进行进一步处理时为您提供更多选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 2017-11-29
    • 2014-12-20
    • 2014-12-13
    • 2020-07-25
    • 2012-12-15
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多