我试图读取一个带有pandas.read_csv的文本文件,但没有加载数据(只有一个带有NA个值的数据帧).文本文件包含有效数据(我可以用EXCEL打开它).当我try 用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.通过编辑此行来try ‘UTF-16 Little Endian’.

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

Python相关问答推荐

如何将Pydantic URL验证限制为特定主机或网站

从包含基本数据描述的文本字段中识别和检索特定字符序列

在Docker中运行HAProxy时无法获得503服务

将列表中的元素替换为收件箱中的元素

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

如何在Python中增量更新DF

inspect_asm不给出输出

已删除的构造函数调用另一个构造函数

使用regex分析具有特定字符的字符串(如果它们存在)

指示组内的rejected_time是否在creation_timestamp后5分钟内

通过交换 node 对链接列表进行 Select 排序

加速Python循环

Python键入协议默认值

删除字符串中第一次出现单词后的所有内容

我们可以为Flask模型中的id字段主键设置默认uuid吗

如何在给定的条件下使numpy数组的计算速度最快?

UNIQUE约束失败:customuser. username

将标签移动到matplotlib饼图中楔形块的开始处

为什么常规操作不以其就地对应操作为基础?

替换现有列名中的字符,而不创建新列