实践解决办法---------------------------------------------------------------------
用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/