【问题标题】:CSV one column bad encoded. Can't pandas.read_csvCSV 一列编码错误。不能 pandas.read_csv
【发布时间】:2021-08-24 03:58:25
【问题描述】:

我有一个包含多列的 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 文件并将标题列留空或在无法读取时为其提供一些默认值?

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

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

    如果大部分数据被编码为 UTF-8,您可以尝试使用 对其进行解码

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

    但如果解码失败,请退回并将其保留在 Latin-1 中,或者用某种错误消息替换它。

    我不是 Pandas 人,但快速谷歌搜索会让我得到类似的东西

    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 如果正确的编码是别的东西,并且你没有纠正它)。

    【讨论】:

      【解决方案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 
      

      用空值填充列。

      希望能回答您的问题!

      【讨论】:

      • 但问题是他们一开始就看不懂,不是吗?
      • 很抱歉,因此唯一的解决方法是删除该列或进行正确的编码。
      猜你喜欢
      • 1970-01-01
      • 2023-01-11
      • 2022-06-28
      • 1970-01-01
      • 2018-01-06
      • 2013-02-24
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多