【问题标题】:Numpy genfromtxt: python 2 vs 3 differences in reading line breaksNumpy genfromtxt:python 2 vs 3 读取换行符的差异
【发布时间】: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 生成的列表)。

标签: python csv numpy


【解决方案1】:

问题出在这里:由于某种原因,我的 CSV 文件在行尾仅包含回车符 (\r):没有换行符 (\n) [我认为 Excel 应该为此感谢]。我用换行符替换了回车,它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多