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
我使用 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