Python read_csv:行尾(EOL)前的分隔符导致列号错误
当文件中的值以分隔符结尾时,使用read_csv读入的列未正确分配。比如说,Python read_csv:行尾(EOL)前的分隔符导致列号错误,python,pandas,Python,Pandas,当文件中的值以分隔符结尾时,使用read_csv读入的列未正确分配。比如说, import pandas as pd # File content columns = ['A','B'] data = [[1,2], [3,4]] # Generate very simple test file with open('test.dat', 'w') as fh: fh.writelines('{0}\t{1}'.format(*columns)) for line in da
import pandas as pd
# File content
columns = ['A','B']
data = [[1,2], [3,4]]
# Generate very simple test file
with open('test.dat', 'w') as fh:
fh.writelines('{0}\t{1}'.format(*columns))
for line in data:
fh.write('\n')
for val in line:
# This is the crux: there is a tab-delimiter after each value,
# even the last one!
fh.write('{0}\t'.format(val))
# Try to read it
df = pd.read_csv('test.dat', sep='\t', index_col=None)
print(df)
产生
A B
1 2 NaN
3 4 NaN
这是一个bug还是一个特性
在这种特定情况下,可以使用
df = pd.read_csv('test.dat', sep='\t', index_col=None, usecols=['A','B'])
正确产生
A B
0 1 2
1 3 4
但是,对于具有未知的、大量列的文件,此修复是不方便的。“pd.read\u csv”是否有任何选项可以解决此问题?有趣的是,将*量词添加到sep参数似乎有效:
df = pd.read_csv('test.dat', sep='\t*', index_col=None)
分隔符的定义是“分隔其他事物的事物”,因此在行尾有一个分隔符是很奇怪的。在我看来,这是理想的行为——如果不使用额外的分隔符,如何在行尾指定一列NaN?我建议在使用前去掉尾随标签。如果文件非常大,您可以使用sed来执行此操作。事实上,仔细看一下您所拥有的,我确实认为这是一个bug——它应该在末尾有一个“Unamed-2”列,包含所有的NaN。你应该报告!对我来说,这似乎是一个错误。