python - Pandas read_csv : Data is not being read from text file (open() reads hex chars)

标签 python pandas character-encoding text-files

我正在尝试使用 pandas.read_csv 读取文本文件,但未加载数据(仅具有 NA 值的数据帧。该文本文件包含有效的数据(我可以用 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 打开该文件时,它准确地显示了它的外观:一个文本文件,其值由管道 (|) 分隔。所以,现在我感到非常惊讶。

我错过了什么?有人能指出我正确的方向吗?哪种编码是正确的?

最佳答案

这表明您的文本文件的编码既不是 utf-8 也不是 latin1。通过编辑此行尝试“UTF-16 Little Endian”..

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

关于python - Pandas read_csv : Data is not being read from text file (open() reads hex chars),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75838499/

相关文章:

python - 是否可以用 Python 编写单行代码?

python - Pandas to_sql() 不适用于 PostgreSQL - 对于类型字符不同的值太长

PHP UTF-8 转 Windows 命令行编码

python - 阿拉伯语文本的 Kivy 文本输入

python - Django - 通过 ajax 请求提供文件

python - Pandas 有条件地选择多列

Python Pandas 自定义日期时间索引

php - 导出为 CSV 俄语字符时不会显示

mysql - 初始化 PDO 时 - 我应该做 : charset=UTF8 or charset=UTF8MB4?

python - 基于numpy数组从多索引数据框中获取数据