【发布时间】:2017-02-14 21:44:28
【问题描述】:
我正在使用 Numpy 的 genfromtxt 读取 CSV 文件。在 Python 2.7(Numpy 1.11.3,anaconda 发行版)中一切正常,但在 Python 3.4.3(Numpy 1.12.0,通过 Ubuntu 包管理器安装)中完全失败。
Python 2.7 中的预期结果(所有数据都被正确读取):
>>> a = np.genfromtxt('data1.csv', delimiter=',', skip_header=1)
>>> a.shape
(1460, 3)
但在 Python 3.4 中,该操作不返回任何内容:
>>> np.genfromtxt('data1.csv', delimiter=',', skip_header=1)
__main__:1: UserWarning: genfromtxt: Empty input file: "data1.csv"
array([], dtype=float64)
>>> a.shape
(0,)
如果我不跳过标题,那么我(一些?)文件中的数据作为单个数组,并且大多数值都是 nan:
>>> a.shape
(2923,)
>>> a
array([ nan, nan, nan, ..., nan, 1256., 147500.])
CSV 文件的前几行是...
Id,GrLivArea,SalePrice
1,1710,208500
2,1262,181500
3,1786,223500
4,1717,140000
5,2198,250000
6,1362,143000
我在此网站或 Google 上没有看到任何其他关于此的问题...我错过了什么吗?命令是相同的。我知道 numpy 版本有点不同,但这是我可以(轻松)在两个 Python 发行版之间获得的最接近的版本。
我现在在 Linux (Ubuntu) 上,但我也在 Windows 上重现了这个问题。
【问题讨论】:
-
我将前几行复制并保存在一个名为
data1.csv的文件中。np.genfromtxt('data1.csv', delimiter=',', skip_header=1)在 Python3 上运行良好。 -
这个文件(或您的设置)有一些有趣的地方,在复制粘贴时并不明显。我会尝试使用通常的 Python readlines 读取文件,看看是否会产生任何异常。 Py3 字符串是 unicode,但
genfromtxt在rbmode 中打开文件,因此它将其读取为字节串。但我不明白这会如何产生不当行为。genfromtxt也可以从字符串列表中加载(例如,readlines生成的列表)。