Python 使用pandas读取带前导空格的文本文件会产生一个NaN列
我正在使用pandas.read_csv读取以空格分隔的文件。文件的每一行前面都有数量可变的空白字符(数字是右对齐的)。当我读取此文件时,它会创建一列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
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
的内容在这种情况下可能也很有用。似乎有人基于此帖子: