CSV一列编码错误。无法读取

2024-10-03 02:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列的CSV文件。其中一列已损坏,编码错误。 名为title的专栏有各种语言的字符:法语、意大利语等

num | ratio |  title   | ...
 1     1.2     🥶2ï
 2     2.5     djije
 3     4.1     abc
...    ...     ...

当我尝试读取文件pandas.read_csv('myFile.csv')时,我收到以下错误:

'utf-8' codec can't decode byte 0xcf in position 3: invalid continuation byte

如何使用pandas读取csv文件,并将标题列留空,或者在无法读取时为其提供一些默认值


Tags: 文件csv语言pandas编码title错误byte
2条回答

如果要单独排除列title,请读取所有列并删除列title

例如

df = pd.read_csv('filename')

df = data.drop('title', axis = 1)

要为列指定默认值,请使用:

df['title'] = 0 #(the value you want to provide by default)

或使用:

df['title'] = np.nan 

用空值填充列

希望这能回答你的问题

如果您的文件包含混合编码,您可以将其作为二进制读入内存,或者作为黑客,将其作为Latin-1打开,然后对每行上的Title字段进行单独解码

如果大部分数据编码为UTF-8,则可以尝试使用

title.encode('latin-1').decode('utf-8 )

但是,如果解码失败,请后退并用拉丁语-1保存,或者用某种错误消息替换它

我不是一个喜欢熊猫的人,但快速的谷歌搜索让我有点像

import pandas as pd

df = pd.read_csv('myFile.csv', encoding='latin-1')

def attempt_decode(x):
    try:
        return x.encode('latin-1').decode('utf-8')
    except UnicodeDecodeError:
        return 'Unable to decode: %s' % x)

df['Title'] = df['Title'].apply(attempt_decode)

Latin-1具有唯一的属性,即每个输入字节都与具有相同值的Unicode代码点完全对应,因此您永远不会得到解码错误(但是,显然,mojibake如果正确的编码是其他编码,并且您无法纠正它)

相关问题 更多 >