我有一个标准格式的csv输入文件,其中包含一个凌乱的标题,然后是35列和8760行的数组。所有这些数据都是数字,除了第6列,这是文本。我曾尝试允许genfromtxt()
自己弄清楚这一点,但最终该专栏转向nan
s,我相信因为没有引号。在csv文件中读取一列中间的字符串
目前,我正在读这个数组如下:
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应该看看这个[问题](http://stackoverflow.com/questions/20982437/how-to-parse-a-csv-with-python-当一列有多行) – ELavicount
是否有你需要直接读取到一个numpy数组的原因?你可能应该看看'pandas' –
使用一个只显示三行的数据文件,你的第二个例子适用于我。我将“S10”更改为“S32”以确保文本字段未被截断,并且我没有使用“skip_header”参数,因为我没有添加标题。当你像这样指定一个dtype时,该函数返回一个结构化数组(http://docs.scipy.org/doc/numpy/user/basics.rec.html)。那是你得到的吗? –