python3利用pandas读取csv文件的报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position X

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position X
Unicode的解码错误:使用'utf-8'无法解码在X位置的0xd0字符

bug原因:这个csv文件在写入时的编码并不是用utf-8写入的,所以在读取的解码过程中(用utf-8解码),就会报错

所以解决这个问题就需要知道这个csv文件写入时是用哪种编码写入的,那么在读取时就可以用对应的编码读取:

#查看所要读取的csv文件 写入时的编码:
import chardet
f = open(r"你的csv文件路径",'rb')
its_code = f.read()
print(chardet.detect(its_code))
# 输出结果为:
# {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

因此在用pandas读取时应该这样:

import pandas as pd
data = pd.read_csv(r"你的csv文件路径",encoding='GB2312')#问题解决

网上的用记事本打开方式修改原来的编码,会导致乱码,而且治标不治本。

首要注意的一点是,如果这个csv文件是你自己写的,那么就应该在写入时注意编码格式,而不是任其默认,那么作为一手写入csv文件的你,当然就知道这个csv文件的编码格式了。关键还是要规范:

    with open("你所要写入的csv文件路径", "w", newline='',,encoding='utf-8-sig') as csvfile:
# 这里我通常写入的编码格式为'utf-8-sig',因为从爬取数据过程中即使存储为utf-8,也有乱码问题,一般'utf-8-sig'不会报错

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值