【问题标题】:Error n reading csv file: utf-8 codec cant decode读取 csv 文件时出错:utf-8 编解码器无法解码
【发布时间】:2016-05-02 07:55:00
【问题描述】:

在运行代码以合并(基本上是内部连接)两个 csv 文件时,我在读取 csv 文件时遇到错误。我的代码:

import csv
import pandas as pd
s1= pd.read_csv(".../noun.csv")
s2= pd.read_csv(".../verb.csv")
merged= s1.merge(s2, on=("userID" ,"sentID"), how ="inner")
merged.to_excel(".../merge1.xlsx",index = False)

错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 5: invalid start byte

我的内容示例是:

verb file

userID  sentID  verb
['3477'  1     ['am', 'were', 'having', 'attended', 'stopped']
['3477'  2     ['felt', 'thrusting']

noun file
userID  sentID  Sentences
['3477'   1    Thursday,
['3477'   1    November

【问题讨论】:

  • 所以你的文件不是 UTF-8 编码的。选择一种不同的编码,一种与您的文件内容实际匹配的编码。
  • edit您的问题并添加您输入的相关部分。
  • 我怎么知道哪个是正确的?你有什么想法吗?
  • 不,我不知道您的文件中有什么。如果你也不知道,你需要去问问提供文件的人。
  • 我添加了我的文件类型。 @Martjin

标签: python csv merge


【解决方案1】:

您可以使用尝试检测编码的库,例如cchardet

pip install cchardet

如果您使用 python 2.X,您还需要 CSV 库的backport。它们原生支持 Unicode,而 Python 2 的 csv 不支持:

pip install backports.csv

然后在你的代码中你可以做这样的事情:

import cchardet
import io
from backports import csv

# detect encoding
with io.open(filename, mode="rb") as f:
    data = f.read()
detect = cchardet.detect(data)
encoding_ = detect['encoding']
# retrieve data
with io.open(filename, encoding=encoding_) as csvfile:
    reader = csv.reader(csvfile, ...)
...

我不知道 pandas,但你可以这样做:

# retrieve data
s1= pd.read_csv(".../noun.csv", encoding=encoding_)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2014-08-29
    • 2019-03-08
    • 1970-01-01
    • 2020-07-17
    • 2018-05-05
    相关资源
    最近更新 更多