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

时间:2015-01-09 15:12:41

标签: 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 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

这是一个错误还是一个功能?

在这种特定情况下,可以使用

解决问题
df = pd.read_csv('test.dat', sep='\t', index_col=None, usecols=['A','B'])

正确生成

   A  B
0  1  2
1  3  4

但是,对于具有未知,大量列的文件,此修复程序不方便。是否有任何选项" pd.read_csv"那可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

有趣的是,将*量词添加到sep参数似乎有效:

df = pd.read_csv('test.dat', sep='\t*', index_col=None)