0

我是使用 Python 3.4 的新手,下个月我将在实习中使用它。然而,我的导师给了我一个练习任务,而我还没有开始练习。因此,他给了我一组数据,并让我弄清楚如何将其加载出来。但是,它一直向我展示:

Traceback (most recent call last): 
 File "<pyshell#3>", line 1, in <module>
   raindata = loadtxt('slz_chuva.txt', comments='#', delimiter=',')
 File "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", line 848, in loadtxt
   items = [conv(val) for (conv, val) in zip(converters, vals)]
 File "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", line 848, in <listcomp>
   items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: b'A203'

这是我的代码:

from scipy import loadtxt

raindata = loadtxt('slz_chuva.txt', comments='#', delimiter= ',')

这是我的数据:

codigo_estacao,数据,hora,temp_inst,temp_max,temp_min,umid_inst,umid_max,umid_min,pto_orvalh#o_inst,pto_orvalho_max,pto_orvalho_min,pressao,pressao_max,pressao_min,vento_direcao,vento_vel,vento_rajada,radiacao,precipitacao

A203,09/05,2014,00,24.8,24.8,24.5,95,95,94,23.9,24.0,23.7,1006.3,1006.3,1005.7,0.3,24,1.8,-3.08,0.0 A203,09/05/ 2014,01,24.5,24.8,24.5,95,95,95,23.7,24.0,23.7,1006.9,1006.9,1006.3,0.0,30,1.7,-2.78,0.0 A203,09/05/2014,02,24.6, 24.6,24.4,96,96,95,23.8,23.8,23.7,1006.6,1006.9,1006.6,0.3,42,1.7,-2.86,0.0 A203,09/05/2014,03,24.8,25.0,24.5,96, 96,95,24.1,24.2,23.8,1006.2,1006.6,1006.2,0.0,51,1.8,-1.70,0.0

有人可以帮我吗?

谢谢

4

2 回答 2

0

我在这里找到了解决方案,但是,我一直在努力从文件中读取前 2 列。我的新代码是:

import matplotlib
matplotlib.use('SVG')
import numpy as np
from pylab import *
import matplotlib.pyplot as pyplot

raindata = np.genfromtxt('slz_chuva.txt', float,delimiter=',')  

而且,这 2 个列是必不可少的,因为它们分别是站名和日期。

于 2014-05-23T22:06:26.873 回答
0

更正第一个日期,并使用recfromcsv

In [40]: sp.recfromcsv('stack23785259.txt')
Out[40]: 
rec.array([ ('A203', '09/05/2014', 0, 24.8, 24.8, 24.5, 95, 95, 94, 23.9, 24.0, 23.7, 1006.3, 1006.3, 1005.7, 0.3, 24, 1.8, -3.08, 0.0),
       ('A203', '09/05/2014', 1, 24.5, 24.8, 24.5, 95, 95, 95, 23.7, 24.0, 23.7, 1006.9, 1006.9, 1006.3, 0.0, 30, 1.7, -2.78, 0.0),
       ('A203', '09/05/2014', 2, 24.6, 24.6, 24.4, 96, 96, 95, 23.8, 23.8, 23.7, 1006.6, 1006.9, 1006.6, 0.3, 42, 1.7, -2.86, 0.0),
       ('A203', '09/05/2014', 3, 24.8, 25.0, 24.5, 96, 96, 95, 24.1, 24.2, 23.8, 1006.2, 1006.6, 1006.2, 0.0, 51, 1.8, -1.7, 0.0)], 
      dtype=[('codigo_estacao', 'S4'), ('data', 'S10'), ('hora', '<i4'), ('temp_inst', '<f8'), ('temp_max', '<f8'), ('temp_min', '<f8'), ('umid_inst', '<i4'), ('umid_max', '<i4'), ('umid_min', '<i4'), ('pto_orvalho_inst', '<f8'), ('pto_orvalho_max', '<f8'), ('pto_orvalho_min', '<f8'), ('pressao', '<f8'), ('pressao_max', '<f8'), ('pressao_min', '<f8'), ('vento_direcao', '<f8'), ('vento_vel', '<i4'), ('vento_rajada', '<f8'), ('radiacao', '<f8'), ('precipitacao', '<f8')])

您仍然可以使用loadtxt,但您必须构建自己的dtype.

dtype=[('codigo_estacao', 'S4')... ('precipitacao', '<f8')]
np.loadtxt('stack23785259.txt',delimiter=',',dtype=dtype)

您应该查看这些功能的文档,并且recarray.


genfromtxt以相同的方式使用,您需要设置几个参数:

np.genfromtxt('stack23785259.txt',delimiter=',',dtype=None,names=True)

dtype=None告诉它推断字段类型;names=True告诉它从第一行取名字。

如果日期是'2014-09-05'格式(ISO 8601 格式),那么这dtype会将它们读作np.datetime64. (它还将所有数字字段加载为浮点数)。

dtype([('codigo_estacao', 'S4'), ('data', '<M8[D]'), ('hora', '<f8'), ('temp_inst', '<f8'), ('temp_max', '<f8'), ('temp_min', '<f8'), ('umid_inst', '<f8'), ('umid_max', '<f8'), ('umid_min', '<f8'), ('pto_orvalho_inst', '<f8'), ('pto_orvalho_max', '<f8'), ('pto_orvalho_min', '<f8'), ('pressao', '<f8'), ('pressao_max', '<f8'), ('pressao_min', '<f8'), ('vento_direcao', '<f8'), ('vento_vel', '<f8'), ('vento_rajada', '<f8'), ('radiacao', '<f8'), ('precipitacao', '<f8')])
于 2014-05-21T19:52:41.410 回答