0

编辑:

谢谢你的及时回复,乔纳森。

正如您在下面建议的那样,我尝试使用numpy.loadtxt. 不幸的是,出现了类似的错误。的输出data = numpy.loadtxt("MyData.csv", skiprows = 39, delimiter = ",")

Traceback (most recent call last):
  File "/Users/aleksnavratil/Desktop/sandbox.py", line 23, in <module>
    data = numpy.loadtxt("MyData.csv", skiprows = 39, delimiter = ",")
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/lib/npyio.py", line 805, in loadtxt
    items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: could not convert string to float: ﾿ÒᆳóネÀëÐٟᄀB.AØME84ハモ

任意 skiprows kwargs 都会引发相同的错误。也许这为字符编码问题假设提供了依据。我仍然不知所措。

/编辑

我有一个由科学仪器(CETR Universal Media Tester UMT-2)生成的.csv 数据文件。数据代表测量的时间序列。当我从 Python 访问该文件时,它的行为很奇怪,但在通过 cat、Nano、TextEdit 等访问时表现良好。这种现象在 Windows 7 和 Snow Leopard 机器上仍然存在,尽管两者都使用 Enthought Scientific Python 发行版。

的输出

f = codecs.open("MyData.csv",encoding="ascii")
data = f.xreadlines()
for line in data:
    print line

****
?****************************************
?****************************************

ÿÿÿZ
Ðí0


þÿÿî
üÿÿð
éí0
óÿÿí
ôí0

ETC…。

这闻起来像一个编码问题,所以我调查了一下:

的输出file -i "MyData.csv"

MyData.csv: text/plain; charset=us-ascii

使用 CharDet 模块;的输出chardetect.py "MyData.csv"

MyData.csv: ascii with confidence 1.0

使用 Codecs 包,我尝试了几种常见的编码都无济于事。另外,我尝试使用Matplotlib's csv2rec. 的输出

r = mlab.csv2rec(codecs.open("MyData.csv", 'rU',),skiprows=39, delimiter=",")

Traceback (most recent call last):
  File "/Volumes/AVN2109/Raw Data/CETR_Plotter.py", line 40, in <module>
    r = mlab.csv2rec(codecs.open("MyData.csv", 'rU',),skiprows=39, delimiter=",")
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-        packages/matplotlib/mlab.py", line 2181, in csv2rec
    process_skiprows(reader)
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-    packages/matplotlib/mlab.py", line 2176, in process_skiprows
    for i, row in enumerate(reader):
Error: line contains NULL byte

这对于任意的 skiprows kwargs 也是如此。

此外,该仪器还可以选择生成 .txt(以及 .csv)作为其输出。两种情况下的行为是相同的。也许我错过了一些明显的东西。有谁知道如何说服这些数据与 Python 一起玩?

4

1 回答 1

2

您需要用来加载数据的包是numpy,我建议您开始使用的功能是loadtxt. 它是最简单的,并且在您的情况下效果很好,因为您的数据是同质的:

import numpy
data = numpy.loadtxt("MyData.csv", skiprows = 39, delimiter = ",")

当然,您的文件有点复杂,看似 2 个数组,顶部有一些您可能想或不想扔掉的东西。您可以对此进行细化,首先加载元数据,然后加载数值。您可能也有兴趣保留列的标题以创建“结构化数组” ,也称为“记录数组”。为此,我建议您首先通过打开文件并检测列的名称及其单位,然后像上面一样将此 dtype 传递给 loadtxt 来构建 dtype。

于 2013-04-03T03:30:36.833 回答