Pandas 阅读问题,0xff 在位置 0

Pandas read issue, 0xff in position 0

我使用 windows 命令行程序 (samtools.exe) 生成了一个巨大的 (6G) txt 文件:

.\samtools.exe mpileup -O bamfile.bam > txtfile.tsv

生成的文件实际上是一个用制表符分隔的table。当我尝试使用 pandas.read_table 打开它时,它给了我:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

当我尝试打印文件的第一行时,它是这样的:
ÿþAL645882 473 N 1 ^!c I 1
除第一个字符外,一切正常。如果我阅读它使用 'rb',确实第一个字符是 0xff.

我真的希望这个table被读取为一个pandas DataFrame,文件很大,无论如何我可以让python忽略0xff字节?或者干脆删除文件中的字节?

提前致谢!

这看起来像 UTF-16 BOM header 被误解了:

In [25]: with open("tmp.csv", "wb") as fp:
    ...:     fp.write("a,b\n1,2".encode("utf-16"))
    ...: 

In [26]: open("tmp.csv", "rb").read().decode("latin-1")
Out[26]: 'ÿþa\x00,\x00b\x00\n\x001\x00,\x002\x00'

In [27]: print(open("tmp.csv", "rb").read().decode("latin-1"))
ÿþa,b
1,2

因此您可以尝试将其解释为 UTF-16:

In [29]: pd.read_csv("tmp.csv")
[...]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

In [30]: pd.read_csv("tmp.csv", encoding='utf-16')
Out[30]: 
   a  b
0  1  2

(如果确实 只是 导致问题的前两个字节,例如打开文件指针并读取两个字节,您还可以采取其他措施,但我怀疑在上面的例子中,文件中有空字节,这些空字节不是很明显,所以最好使用正确的编码。)

它可以用于 windows7 spyder3.6 data=pd.read_csv("C:/Users/Manjeesh/all_state_cancer.csv",encoding='iso-8859-1')

UnicodeDecodeError:'utf-8'编解码器无法解码位置 607 中的字节 0x85:起始字节无效

结果:

:data=pd.read_csv("C:/Users/Manjeesh/all_state_cancer.csv",encoding='iso-8859-1')

data
Out[207]: 
     s.no           user.location  \
0       1               Ahmedabad   
1       2   Madhya Pradesh, India   
2       3           Shahdol (MP)    
3       4           Shahdol (MP)    
4       5               Ahmedabad   
5       6        Bengaluru, India   
6       7   Madhya Pradesh, India