【发布时间】:2014-01-09 23:45:10
【问题描述】:
我有一个标准格式的 csv 输入文件,其中包含我要剥离的凌乱标题,然后是一个 35 列和 8760 行的数组。所有这些数据都是数字,除了第 6 列是文本。我曾尝试让genfromtxt() 自行解决这个问题,但最后该列转向nans,我相信是因为没有引号。
目前,我正在读取这个数组如下:
WeaData = np.genfromtxt(FileIn, delimiter=",", skip_header=8)
我尝试过手动指定列类型
WeaData = np.genfromtxt(FileIn, delimiter=",", skip_header=8, dtype=(float,float,float,float,float,str,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float))
和
WeaData = np.genfromtxt(FileIn, delimiter=",", skip_header=8, dtype=[float for n in range(5)]+['S10']+[float for n in range(29)])
但没有运气。我相信我的语法在第一个选项中是错误的,第二个返回一个空数组。有没有一种简单的方法可以做到这一点,最好不指定 35 列类型?
这是我的csv文件的三行供参考,在我不关心的标题之后。
1966,1,1,1,60,A7A7A7A7*0?0?0?0?0?0?0?0A7A7A7A7A7A7F8F8A7E7,3.9,1.7,86,102400,0,0,264,0,0,0,0,0,0,0,230,2.1,0,0,24.1,77777,0,999999999,8,0.1000,0,88,0.000,0.0,0.0
1966,1,1,2,60,A7A7A7A7*0?0?0?0?0?0?0?0A7A7A7A7A7A7F8F8A7E7,4.4,0.0,73,102500,0,0,265,0,0,0,0,0,0,0,270,3.6,0,0,24.1,77777,0,999999999,8,0.1000,0,88,0.000,0.0,0.0
1966,1,1,3,60,A7A7A7A7*0?0?0?0?0?0?0?0A7A7A7A7A7A7F8F8A7E7,2.8,-0.6,79,102500,0,0,258,0,0,0,0,0,0,0,310,2.1,0,0,24.1,77777,0,999999999,8,0.1000,0,88,0.000,0.0,0.0
我正在使用 Python V2.7。
【问题讨论】:
-
嗨,有很多方法可以读取 csv,你应该看看这个question
-
是否有理由需要将其直接读入 numpy 数组?你应该看看
pandas -
使用仅包含您显示的三行的数据文件,您的第二个示例对我有用。我将 'S10' 更改为 'S32' 以确保文本字段没有被截断,并且我没有使用
skip_header参数,因为我没有添加标题。当您指定这样的 dtype 时,该函数会返回一个结构化数组 (docs.scipy.org/doc/numpy/user/basics.rec.html)。这就是你得到的吗?
标签: python python-2.7 csv numpy