pandas读、写csv文件错误解决办法(重要)

 

实践解决办法---------------------------------------------------------------------

用pandas读取csv文件特别说明:

1、文件名称前加r解决文件名(含路径中特殊符号)字符串转义问题;如:pd.read_csv(r'd:\bujiao.csv'),bujiao.csv文件中无中文可正常读出。

2、encoding='gb2312'解决文件内容本身含有中文问题。如:pd.read_csv(r'd:\bujiao.csv',encoding='gb2312'),bujiao.csv文件中有中文可正常读出。但不可正常读出:“补缴明细.csv”这个文件。

问题:UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence

如果你的字符串string中有诸如某些繁体字,例如"河滘小学"

中的滘,那么gb2312作为简体中文编码是不能进行解析的,必须使用国标扩展码gbk,gbk支持繁体中文和日文假文。

将以上pd.read_csv(r'd:\bujiao.csv',encoding='gbk'),可以正读写了。

3、文件名称中如果有中文,必须进一步处理,如:

f_read=open(r'd:\补缴明细.csv',encoding='gb2312')

pd.read_csv(f_read)

可以将文件内容中有中文字符的,文件名含有中文字符的“补缴明细.csv”这个文件读成dataframe格式。

4、如果仍出现codec can't decode byte 0xbc in position 2: invalid start byte等错误提示,可能是文本中出现的一些特殊符号超出了gbk的编码范围,可以选择编码范围更广的‘gb18030’去解码。encoding='gb2312'改成encoding='gbk'或encoding='gb18030'

------------------------------------------------------------------------------------

pandas读取Excel(或csv)文件,以0开头的数据,出现数据缺失

实践解决方法:加参数converters = {u'code':str}

pd.read_csv(r".\fra\jb\jb.csv" ,encoding='gb18030',index_col=0, converters = {u'code':str})

这里'code'是dataframe中的股票代码列,如果不加converters = {u'code':str}参数,导致读出的股票代码'000539'变成'539'。

直接使用df = pd.read_excel(os.getcwd() + os.sep + 'stock.xlsx')读取文件时,证券代码被转换为数字(000001 =>1),0被舍去,导致不正确。

pandas读取Excel文件,以0开头的数据,出现数据缺失 - CSDN博客  https://blog.csdn.net/rongruosong/article/details/76569302

这里为了省去读入后在对代码进行补全的麻烦,再读取Excel文件时: 
df = pd.read_excel(os.getcwd() + os.sep + 'stock.xlsx',converters = {u'证券代码':str}) 
证券代码按照str类型读入,不会出现0被舍去的情况

————————————————————————————————————————

关于写入CSV文件内容发生乱码

df_stat.to_csv(r'.\全部劳动纠纷统计.csv'),可导出文件,但内容中含有中文汉字,结果全是乱码。

df_stat.to_csv(r'.\全部劳动纠纷统计.csv', encoding="gbk"),导出结果正常。

 

 

pandas.DataFrame.to_csv — pandas 0.22.0 documentation  http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html

python中文件的读写——read_csv()读取文件 - CSDN博客  https://blog.csdn.net/newbieMath/article/details/61432073

import pandas as pd

pd.read_csv('d:\si\a.csv')

当pandas读入CSV文件时,因为文件中有中文字符,结果提示如下错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xcc in position 468: invalid continuation byte

一、首先,查看本机的编码、python版本:#查看本机器默认的encoding
>>> import sys

>>> sys.getdefaultencoding()

输出结果为:‘utf-8’

查看python版本号:import sys回车;sys.version回车

测试:将中文字符删除,只留数字。执行:pd.read_csv('d:\si\a.csv'),正常读取数据。

解决办法:

pd.read_csv('d:\si\a.csv')

错误提示:FileNoFoundError:File b'd:\\si\x07.csv'  does not exist!

原因:字符串中的“\a”被系统解释成了转义的\a,即下六进制的x07。

解决方案第一步:pd.read_csv(r'd:\si\a.csv'),在字符串前加“r”标识。或pd.read_csv('d:\\si\\a.csv‘),结果:

如果csv文件中无中文字符,可以正常读出;

如果csv文件中有中文字符,提示:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 468: invalid continuation byte

进一步解决办法:pd.read_csv('d:\\si\\a.csv',encoding='gb2312')

pd.read_csv(r'd:\补缴明细.csv',encoding='gb2312')

 

DjangoUnicodeDecodeError utf8编码错误解决办法(进一步解释)  https://blog.csdn.net/xiaoxinluhua/article/details/45888331

codec:编解码器,编解码程序

python字符串前面加u,r,b的含义

u/U:表示unicode字符串 

不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。 
一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u;但是中文, 必须表明所需编码, 否则一旦编码转换就会出现乱码。 
建议所有编码方式采用utf8
r/R:非转义的原始字符串 
与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。 
以r开头的字符,常用于正则表达式,对应着re模块。
b:bytes 
python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes 
python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法

转义字符_百度百科  https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6?fr=aladdin

ASCII_百度百科  https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81&fromid=99077

利用十六进制表示的转义字符,x07就是字母“a”。

 

 

参考网站:https://stackoverflow.com

http://pandas.pydata.org/pandas-docs/stable/

Installation — Matplotlib 2.2.2 documentation  https://matplotlib.org/

NumPy — NumPy  http://www.numpy.org/

  • 29
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值