Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas读取带前导空格的文本文件会产生一个NaN列_Python_Python 2.7_Pandas - Fatal编程技术网

Python 使用pandas读取带前导空格的文本文件会产生一个NaN列

Python 使用pandas读取带前导空格的文本文件会产生一个NaN列,python,python-2.7,pandas,Python,Python 2.7,Pandas,我正在使用pandas.read_csv读取以空格分隔的文件。文件的每一行前面都有数量可变的空白字符(数字是右对齐的)。当我读取此文件时,它会创建一列NaN。为什么会发生这种情况,最好的预防方法是什么 例如: 文本文件: 9.0 3.3 4.0 32.3 44.3 5.1 7.2 1.1 0.9 命令: import pandas as pd pd.read_csv("test.txt",delim_whitespace=True,header=None) 输出: 0

我正在使用pandas.read_csv读取以空格分隔的文件。文件的每一行前面都有数量可变的空白字符(数字是右对齐的)。当我读取此文件时,它会创建一列NaN。为什么会发生这种情况,最好的预防方法是什么

例如:

文本文件:

  9.0  3.3 4.0
 32.3 44.3 5.1
  7.2  1.1 0.9
命令:

import pandas as pd
pd.read_csv("test.txt",delim_whitespace=True,header=None)
输出:

    0     1     2    3
0 NaN   9.0   3.3  4.0
1 NaN  32.3  44.3  5.1
2 NaN   7.2   1.1  0.9

FWIW我倾向于使用
\s+
,而不会遇到同样的问题:

>>> pd.read_csv("wspace.csv", header=None, delim_whitespace=True)
    0     1     2    3
0 NaN   9.0   3.3  4.0
1 NaN  32.3  44.3  5.1
2 NaN   7.2   1.1  0.9
>>> pd.read_csv("wspace.csv", header=None, sep=r"\s+")
      0     1    2
0   9.0   3.3  4.0
1  32.3  44.3  5.1
2   7.2   1.1  0.9

有趣的是,这会有所不同(我也使用
'\s+'
),肯定是一个bug?我们不应该使用
'\s+'
。表示
delim_whitespace=True
应该更快。我将等待任何其他可能解释这一点的响应,但可能会将其标记为我的解决方案。这对于
delim_whitespace
来说是一个非常模糊的例子。我不清楚什么是正确的行为--“\s+”基本上是“偶然”起作用的。@WesMcKinney:嗯。我正要提出一些建议,但后来我想到了反例。事实上,正是因为这种行为,我不久前又改用了
sep
。如果假设这两个列具有相同的行为,那么这应该是固定的,至少,这样我可以在必要时开始删除列。我不确定一个
忽略前导定界符是否正确。@DSM啊,我明白了。在我看来,如果您使用的是空格分隔符,那么尝试将前导空格作为元素来读取几乎总是错误的。换句话说,我认为目前的行为是不好的。但是,
ignore\u leading\u delimiter
可能对其他分隔符有用。类似于
skip\u initial\u whitespace
的内容在这种情况下可能也很有用。似乎有人基于此帖子: