Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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 read_csv:行尾(EOL)前的分隔符导致列号错误_Python_Pandas - Fatal编程技术网

Python read_csv:行尾(EOL)前的分隔符导致列号错误

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

当文件中的值以分隔符结尾时,使用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 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。你应该报告!对我来说,这似乎是一个错误。