Pandas读取_csv:未从文本文件读取数据(open()读取十六进制字符)

dkqlctbz  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(134)

我尝试读取pandas.read_csv的文本文件,但没有加载数据(只有NA值的 Dataframe 。文本文件包含有效数据(我可以用excel打开它)。当我尝试使用pathlib.Path.open()读取它时,它显示带有十六进制代码的行。
让我告诉你发生了什么:

import pandas as pd
from pathlib import Path

path = Path('path/to/my/file.txt')
# This shows an error: Unidecode Error... as usual with windows files
df = pd.read_csv(path, dtype=str) 
## UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 96: invalid continuation byte

# This imports a dataframe full of null values:
df = pd.read_csv(path, dtype=str, encoding='latin1') 
print(df)
##           C Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6  \
## 0     <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>   
## 1     <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>  
## ...

# So, what is Python reading? I tried this:
with path.open('r') as f:
    data = f.readline()
print(data)
## 'C\x00e\x00n\x00t\x00r\x00o\x00 \x00B\x00e\x00n\x00e\x00f\x00i\x00c\x00i\x00o\x00s\x00\n

而且,正如我之前所说,当我用Excel打开文件时,它会显示它应该是什么样子:一个文本文件,其值由管道(|)分隔。所以,现在,我感到非常惊讶。
我错过了什么?有没有人能给我指出正确的方向?哪种是正确的编码?

4zcjmb1e

4zcjmb1e1#

这表明您的文本文件的编码既不是utf-8也不是latin 1。请通过编辑此行尝试'UTF-16 Little Endian'。

df = pd.read_csv(path, dtype=str, encoding='utf-16le')

相关问题