【发布时间】:2014-07-27 14:25:07
【问题描述】:
我有数百个这样的文本文件,每列用三个空格分隔。数据为一年:每月 12 个月 31 天。
下面,我只在下面显示与问题相关的内容:
001 DIST - 阿迪巴德安得拉平均温度
DATE JAN FEB MAR . . . . NOV DEC
01 21.5 24.3 27.1 25.8 22.4
02 21.4 24.2 27.1 25.8 22.4
. . . . . .
. . . . . .
. . . . . .
27 23.6 26.8 30.3 23.1 21.3
28 23.8 27.0 30.6 22.9 21.3
29 23.4 31.0 22.9 21.2
30 23.5 31.1 22.6 21.4
31 23.8 31.2 . . . . 21.6
我想将每一列读入一个数组,然后对其进行平均。
为此,我正在使用genfromtext() 函数,如下所示:
import numpy as np
JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC = np.genfromtxt("tempmean_andhra_adilabad.txt", skiprows=3,
unpack=True, invalid_raise=False,
usecols=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
autostrip=True)
如您所见,我已跳过前三行和第一列,并将每一列解压缩到一个数组中。没有invalid_raise=False,我收到以下错误:
Traceback (most recent call last):
File "pyshell#32", line 1, in 'module'
JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC = np.genfromtxt("temp mean_andhra_adilabad.txt",skiprows=3,unpack=True,usecols=(1,2,3,4,5,6,7,8,9,10,11,12),autostrip=True)
File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 1667, in genfromtxt
raise ValueError(errmsg)
ValueError: Some errors were detected !
Line #32 (got 12 columns instead of 12)
Line #33 (got 12 columns instead of 12)
Line #34 (got 8 columns instead of 12)
我认为这个问题是因为列的长度不同?还是其他什么原因?
我想查看输出,所以我使用了invalid_raise=False。现在我的问题是,当我打印任何数组时,比如JAN,我只会得到 28 个元素。即每个数组只有 28 个元素。似乎每列只读取 28 行,因为 FEB 列以 28 天结束。但我需要每个月的数据,即JAN 31 个元素JUNE 等 30 个元素。
如何获取每个月的所有元素?
我认为这是一个非常基本的问题,但我对 Python 和 NumPy 非常陌生,两周前才开始学习。我在 StackOverflow 和 Google 上搜索了很多问题,并了解了如何跳过行、列等。但我找不到与这个特定问题相关的任何答案。
请推荐一些模块、功能、代码等。
提前致谢。
【问题讨论】:
-
如果您将
filling_values=NaN作为参数传递会发生什么? -
根据您的建议,我通过了
filling_values=NaN并收到以下错误NameError: name 'NaN' is not defined -
试试
numpy.NaN甚至0,有兴趣知道这是否有效 -
它没有显示任何错误,但数组仍然有 28 个元素。并且没有填充 NAN 值。虽然我读过
filling_values属性,但我没有使用它,因为我认为以后无法使用np.mean()来找到平均值。 -
能否发下数据或链接,可能 Pandas 可以处理,pandas 使用 numpy 存储数据
标签: python numpy genfromtxt