-
2018-12-19 18:44:57
python read_csv 读取文件时,默认添加整数序列index, 可以在 to_csv 中加入参数 index = False即可。
更多相关内容 -
python read_csv遇到的encoding字符编码问题总结
2020-05-28 15:53:22我偶尔会接到把csv导入数据库的任务,我通常都是先用pd.read_csv读取文件数据,接着用df.to_sql导入数据库。有时read_csv会遇到不同的编码问题,我的解决方法通常是把常用的几种编码挨个试一下,哪种结果正确就选择...一、博客背景
我偶尔会接到把csv导入数据库的任务,我通常都是先用pd.read_csv读取文件数据,接着用df.to_sql导入数据库。有时read_csv会遇到不同的字符编码问题,我的解决方法通常是把常用的几种字符编码挨个试一下,哪种结果正确就选择哪一种。
二、博客目的
今天在这里,把我遇到的几种字符编码梳理汇总一下,方便自己和大家以后查询。
三、可以参考的字符编码
1、我在read_csv遇到过的字符编码
这里先放一下我用read_csv遇到过的编码吧。
reader = pd.read_csv(file_path , sep='\t' # , encoding='gb18030' # , encoding='unicode_escape' , encoding='utf-16' # , encoding='utf-8' # , nrows=5 , chunksize=20000 )
我们主要看encoding参数,其他参数这里不讨论。
有的csv文件不加encoding参数也能顺利读取,有的用utf-8就行,但是遇到极个别刁钻的,则需要用其他编码方式。
编码方式如果想要搞透彻需要多看几篇博客了,等我研究后再添加到文后。
下面我之前遇到的编码方式的问题,如果你不幸也到了编码问题,就试下上面几种encoding,如果还不行就查阅其他网页吧。2、常见的bug
UnicodeDecodeError: utf-8 codec can t decode byte 0xb3 in position 732: invalid start byte
2、UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte
3、UnicodeDecodeError: ‘gb18030’ codec can’t decode byte 0xff in position 0: illegal multibyte sequence四、浅谈字符编码问题
1、数字怎么编码
一个bit可以是数字0或者是数字1,一个字节由8个bit组成,全是0表示数字0,全是1表示数字255,由排列组合可以计算出8个bit共有2^8=256种不同组合,所以一个字节可以表示数字0~255共256个数字。在计算机中,数字是这样编码。
2、字符怎么编码
一堆二进制的0和1怎么也算不出字母A吧,那怎么用0和1表示字母A呢?直接表示行不通,就用间接的方法吧,用数字中转一下,给字母A指定一个数字编号,比如数字65(注:博客中所有字母或汉字的编号都是编造的,后续查到正确的再替换)。在计算机里,存储字母A时,存储数字65对应的二进制编码,要读取时,先把二进制编码转成数字编码,再查看数字编码对应的字母。
把符号和编号一一对应收录起来就是字符集了。2.1 ASCII字符集
ASCII字符集(1967年)是美国人专门为英文设计的,收录了128个字符,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)。
前面讲到一个字节由8个bit组成,1个bit可以表示0或1共2个数字,由排列组合可以计算出8个bit可以组合出2^8=256个不同的组合,也就是一个字节可以表示256个数字。
这么看来,一个字节就可以完全表示ASCII字符集里任一个字符了。
没有中文怎么行?2.2 GB2312字符集
GB2312字符集(1980年),国标,中国的字库,包括简体中文、拉丁字母、日文片假名。
没有繁体字怎么行呢?2.3 BIG5字符集
BIG5字符集(1984年),包含了繁体字。
那其他国家的文字怎么办?2.4 Unicode字符集
Unicode字符集(1994年),是国际通用的全球化字符集,收录有世界很多国家的文字。既然能表示更多的字符,就需要占用更多的字节,从百科上查到Unicode需要用2个字节。
从集合角度来看,ASCII是Unicode的子集,能用ASCII表达的字符,如果用Unicode表达,前面一个字节就会用0填充,造成存储的浪费。
我更倾向于这样理解,Unicode像个定长编码,能用1个字节表达的用了2个字节就造成了资源的浪费。
此时需要更灵活的编码,UTF就产生了。2.5 UTF
UTF(Unicode Transformation Format,Unicode转换格式或统一码转换格式),为了解决Unicode定长这个问题而生的,它是可变长度的字符编码,主要有UTF-8、UTF-16、UTF-32等。
UTF-8
1-6个字节组成,汉字由3个字节表示。
(有时间再研究下UTF不同编码之间的联系和差异。)表格是我根据自己的理解总结的,后面的编码产生的原因都是为了弥补或补充前面编码的功能。
五、愿景
写完这个博客我有2个愿望,
1、希望三、可以参考的字符编码能帮助你解决使用read_csv遇到的encoding问题。
2、希望四、浅谈字符编码能帮助你理解字符编码,知道为什么会有这种字符编码出现以及它的优缺点。
好了,暂时到这里吧,欢迎留言讨论。 -
python read_csv时开头出现\ufeff
2019-07-23 15:55:20发现问题: 用pandas读取csv文件时,df,head()一切正常。 接下来我想把宝贝那一栏删掉,但是显示: ValueError: labels [‘宝贝’] not contained in axis 明明这个字段是在的。...read_csv时添加上参数 encoding=...发现问题:
用pandas读取csv文件时,df,head()一切正常。
接下来我想把宝贝那一栏删掉,但是显示:
ValueError: labels [‘宝贝’] not contained in axis
明明这个字段是在的。然后我就把dataframes的columns打印出来。
很奇怪出现\ufeff 字符
然后问度娘~~~解决办法:
read_csv时添加上参数 encoding=‘utf-8-sig’
突然想到前段时间爬虫时,保存csv数据顺序错误,df显示的顺序和保存出来的不一样 也是在保存时用这个编码格式。
原因:成功解决问题。
第一次发帖,有点小激动! -
Python学习——csv文件读取:read_csv()基本参数应用
2021-01-14 14:56:44(本文是笔者查阅一定资料...作为大数据分析领域的一个新人,python成为笔者当下最需要学好的一项技能,而大数据分析离不开数据清洗,数据清洗的第一步便是将数据读入,现就python中的read_csv()函数出发,通过分析最...(本文是笔者查阅一定资料整理原创所写,受知识面限制,如存在错误,欢迎指出)
Python作为一门年轻的计算机语言,在近些年来大数据与人工智能等前沿科技革命的推动下经历着高速发展,一度呈现赶超传统语言的趋势。
作为大数据分析领域的一个新人,python成为笔者当下最需要学好的一项技能,而大数据分析离不开数据清洗,数据清洗的第一步便是将数据读入,现就python中的read_csv()函数出发,通过分析最常使用的参数,熟悉其基本操作。
下表为笔者使用的数据:
下表为常见参数及其部分信息:
1.filepath_or_buffer
该参数是唯一不能缺失的参数,其目的是提供读取文件路径,对于大多数初学者而言,读取内容通常为电脑上对应文件,现读取笔者位于E:\MYWORK下的csv文件edu.csv
代码如下:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",encoding="gbk")
print(df)
Spyder环境显示如下:
2.sep demlimiter
两关键字分别表示分隔符和定界符,同时demlimiter还有备选分隔符的功能,且优先度高于sep,当指定delimiter参数时,sep参数就会失效。通常情况下csv文件以逗号作为分隔符。
3.header
header关键字的主要功能有两个:第一是将指定行的数据作为读取数据各列的列名,由最初读取数据显示出的信息表明,edu文件文件中第一排的“姓名”“居住地”“年级”“年龄”“是否住校”依次成为了各列的列名,这是因为header默认参数为0,即将edu文件中第一排作为列名的缘故。现我们修改参数:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",header=1,encoding="gbk")
print(df)
Spyder环境显示如下:
可以发现,原本在第一排的“阴晓彤”同学的数据变为了新读取数据的列名,同时我们也注意到了header参数的第二个功能,那就是确定数据开始行,在将“阴晓彤”同学的数据变为新列名的同时,原本的列名“姓名”“居住地”“年级”“年龄”“是否住校”这一行却因为将第一排(实际的第二排)作为列名而消失了,这是因为同时本行也成为了读取数据的开始行。
4.names
该参数的功能为对列名进行命名,输入如下代码:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",names=["第一列","第二列","第三列","第四列","第五列"],encoding="gbk")
print(df)
Spyder环境显示如下:
同时,为了去除原列命名的影响,我们可以设置参数header=0来进行消除
5.index_col
该参数的主要功能是利用读取数据中的内容建立行的索引,假设我们想将案例中各同学的姓名作为检索,输入如下代码:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",index_col=0,encoding="gbk")
print(df)码片
Spyder环境显示如下:
同时,index_col的参数还可以是序列,这表示同时存在多列作为索引。
6.usecols
当处理的数据量较为庞大,且我们需要处理的数据量仅为文件所提供数据的一部分时,我们会选择使用参数usecols来选定我们需要的对应列的数据,现我们仅需提取案例中的姓名与居住地这两列数据,我们进行如下输入:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",usecols=[0,1],encoding="gbk")
print(df)
Spyder环境显示如下:
7.prefix mangle_dupe_cols
这两个参数都是针对于列操作的基本参数,prefix是建立在没有列标题的基础上,给列添加前缀,而mangle_dupe_cols则是针对数据中存在重复列情况下的一种处理方法,当其参数为True时,会将重复的列进行标号处理,而其值为False的情况下则会将重名列进行覆盖。
8.engine
该参数的主要功能是选择使用的分析引擎,笔者目前接触到的就是c与python两种,两种引擎各有各的优势,c的高效和python的稳定,值得一提的是,特定参数所对应的功能只能在相应的分析引擎条件下使用通过。
9.skipinitialspace
功能为忽略分割符后面的空格,当参数为false,即默认状态下的时候,忽略不计。
10.skiprows
该参数与usecols参数在功能目的上是一致的,都是建立在选取部分数据基础上引入的,不同之处在于,usecols是选取读入的数据列标,而skiprows是选取不读入数据的行标,以本实例进行实验,假设我们要忽略名为“豆金”同学(数据中的第13列)的具体数据,输入如下代码:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",skiprows=[13],encoding="gbk")
print(df)
Spyder环境显示如下:
11.skipfooter
skipfooter在功能上与skiprows即存在一定的差异,在功能上又是殊途同归的,该参数的功能依旧部分选取数据进行读取,不同的是,该参数只能是部分取消读入,且只能从后向前地设定取消读入部分,同样以本案例进行实验,我们取消对于最后五位同学的信息读入,输入如下代码:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",skipfooter=5,encoding="gbk")
print(df)
Spyder环境显示如下:
12.nrows
该参数的功能与skipfooter的含义刚好完全相反,即按照正序的顺序读取选定数量行数的数据,因为该类操作上述已重复不少,故不再进行案例实验
13.keep_default_na
在数据分析的过程中,我们所获得的数据有时不可避免的会产生缺失,而在csv读取下的显示会出现代表空缺的NaN,对于部分人来说可能会在一定程度上影响阅读的美观,这时我们可以选择调用参数keep_default_na实现对于NaN的控制。
现我们删除“豆金”同学的居住地信息,结果显示如下:
输入下列代码:
import pandas as pd
df=pd.read_csv("E:/MYWORK/edu.csv",keep_default_na=False,encoding="gbk")
print(df)
得到如下显示:
可见原本的“NaN”值通过对于参数的控制而消失了。
14.na_filter
当处理数据量达到一定程度,如果我们建立在提前知道所研究对象数据的完整程度,或者数据的完整度并不会太过于影响工作的前提下,我们可以通过设定参数na_filter控制对于丢失值的检查,其值为False时,系统会自动忽略对于数据完善程度的检查,实现更高的处理效率。
15.encoding
指定字符集类型,通常指定为’utf-8’。由于笔者对于这方面的理解有限,故不过多进行赘述。
-
python2.7 read_csv&to_csv 如何忽略原文件中的乱码?
2018-10-15 09:00:05TempData = pd.read_csv('test.csv', encoding='gb2312')) TempData = pd.DataFrame(TempData) TempData.to__csv(‘test.csv’, index=False, sep=',', encoding='gb2312') 由于我的test.csv中本身包含乱码,... -
Python pandas read_csv 中NULL当成NaN类型问题
2021-02-04 14:12:261、使用read_csv读取数据null显示NaNimport pandas as pdfrom io import StringIOdata = u'strings,numbers\nfoo,1\nbar,2\nnull,3'print(pd.read_csv(StringIO(data)))输出:strings numbers0 foo 11 bar ... -
python to_csv和read_csv索引加入内容的问题
2018-07-06 18:12:09先看如下代码:path = "../test/test_sort.csv" df = pd.DataFrame([['a','a','a'],['a','a','a'],['a','a','a'],['a','a','a'],['a','a'...aa = pd.read_csv(path) print aa产生结果如下:可以看到,下一... -
python:to_csv&read_csv常用参数的解析
2019-06-19 11:40:11df.read(file,sep,shkiprows,usecols,nrows,chunksize...) sep=',' # 以 “,” 作为数据的分隔符 shkiprows= 10 # 跳过前十行 usecols=['column1', 'column2', 'column3'] # 读取指定列 nrows = 10 # 只取前10行 ... -
python pandas.read_csv()函数详解
2021-03-24 15:20:19这里将更新最新的最全面的read_csv()函数功能以及参数介绍,参考资料来源于官网。 目录pandas库简介csv文件格式简介函数介绍函数原型函数参数以及含义输入返回函数使用实例 pandas库简介 官方网站里详细说明了pandas... -
Python Pandas read_csv()导入csv或者txt
2019-11-07 21:59:05读文本文件的主要方法: read_csv() read_csv() 可接受以下常用参数: > filepath_or_buffer : various 文件路径 > sep : str, 默认 read_csv()分隔符为',',read_table()方法,分隔符为 \t delimiter : str... -
python read_csv 使用
2018-06-26 17:15:11https://blog.csdn.net/overstack/article/details/9001849上述连接很重要,看一下https://blog.csdn.net/overstack/article/details/9001849In [1021]: print open('foo.csv').read() date,A,B,C 20090101,a,1,2 ... -
python文件的读写read_csv常用参数
2019-09-13 14:24:52文章目录pandas.read_csv参数理解filepath_or_bufferheadersepdelimiterdelim_whitespacenamesindex_colusecolssqueezeprefixdtypeengineconvertersskiprowsskipfooternrowsparse_dateskeep_date_... -
Pandas的read_csv和 to_csv函数参数分析详解 ,pandas的read_csv和to_csv使用方法
2019-12-01 10:10:23Pandas的read_csv和 to_csv函数参数分析详解 1. read_csv read_csv方法定义 pd.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, ... -
python pandas读取read_csv函数设定列名
2020-08-20 10:20:31在python 读取csv文件的时候,有时需要修改目标列的数据类型,这需要在read_csv函数中指定。 (1) 读取同时设定标题 msisdn_list = pd.read_csv(add_file, header=None, names=['SRC_ADDR', 'SRC_BELONG_PROV','SRC_... -
Python中读写文件的read_csv()
2020-11-22 19:11:48pd.read_csv可读取 csv 格式文档到DataFrame 主要参数: data = pd.read_csv('./result.csv',sep=',') data = pd.read_csv('./result.csv',header=None,prefix='XX') data = pd.read_csv('./result.csv',n... -
python pandas.read_csv读取大文件
2020-08-30 21:55:00pandas.read_csv读取较大文件方法 -
python – 在pandas中使用read_csv时精度丢失
2020-12-21 03:22:15我在文本文件中有以下格式的文件,我试图读入一个pandas数据帧.895|2015-4-23|19|10000|LA|0.4677978806|0.4773469340|0.4089938425|0.8224291972|0.8652525793|0.6829942860|0....pd.read_csv('mockup.txt'... -
python – 获取pandas.read_csv以空字符串而不是nan读取空值
2021-04-27 11:12:28我正在使用熊猫库读取一些CSV数据。在我的数据中,某些列包含字符串。字符串“nan”是一个可能的值,空字符串也是这样。我设法让大熊猫读取“nan”作为一个字符串,但我不知道如何让它不读取一个空值作为NaN。这里是... -
python pandas.read_csv读取每行的列数不同csv文件或txt文件
2020-09-03 20:39:30解决方法:使用read_csv方法时,通过names属性设置多指定一些列名。 df = pd.read_csv(txt_or_csv_filename,header=None,index_col=False,names=['a','b','c','d','e']) -
【Python3】pandas.read_csv详解
2018-12-12 22:21:58Python数据分析,一般第一步就是读取数据,这篇详解pandas读取数据read_csv。 read_csv函数参数 几个常用的参数包括path、sep、header、index_col、names、skiprows、na_values、nrows、skip_footer、encoding... -
python_20171120_read_csv读取数据编码问题
2017-11-20 21:50:03问题:自己建立了一个excel文件,另存为csv,读取是错误:utf-8.codec can't decode byte 0xb5 in position 2: invalid start by。 解决办法:用记事本另存,将编码改为utf-8。 -
python用pd.read_csv读取csv文件报错,读取中文文件报错
2021-04-14 19:07:36原因 读取的路径或者是读取的文件名字有中文 解决方法 1....第二种方法是函数里面加一个参数:engine=‘python’ 这样的话路径或者是文件是中文的就没事了 data1=pd.read_csv("岭回归.csv",engine='python') -
Python笔记:函数.read_csv和函数.read_excel相比,哪个性能更好,快多少?
2019-04-11 22:32:05所以想知道.read_csv(),.read_excel()哪个性能好?哪个更快?哪个更省时间? 本着“拿来主义”的态度,高兴地发现之前就有人思考过相同的问题(引用链接·英文)。 griffinc说道:“CSV文件和TXT文件是等同的,... -
python pandas获取csv指定行 列的操作方法
2021-01-20 05:40:02house_info = pd.read_csv('house_info.csv') 1:取行的操作: house_info.loc[3:6]类似于python的切片操作 2:取列操作: house_info['price'] 这是读取csv文件时默认的第一行索引 3:取两列 house_info[['price',... -
Pandas函数read_csv的参数na_values的用法
2020-05-11 15:11:37我们使用Pandas的read_csv函数读取csv文件的时候,缺失的数据总是会自动填充为NaN.什么样的值会被认为是缺失的数据呢?我们能不能提供一些个性化的缺失数据?这就要用到na_values参数。下面将介绍这个参数。 二、na... -
python 用 read_csv读取数据集时删除某几列元素
2021-01-31 19:29:34首先用把所有的数据读进来并转换成列表的形式。 读进来的数据格式为列表套列表。 比如说我们不想要数据列表中每个元素的第一和第二个(以莺尾花数据为例)。我们可以这样做: def ignore_column(complete_data, ... -
pandas read_csv()用于多个分隔符
2020-12-15 16:17:41分隔的pandas数据框 我试过 df_user_key_word_org = pd.read_csv(filepath+"user_key_word.txt", sep='\t|:|;', header=None, engine='python') 它给我以下错误。 pandas.errors.ParserError: Error could be due to... -
read_csv的文件没有表头
2021-06-19 20:28:18如果读取的文件中没有表头,那么会把第一行数据当作表头,即出现下面这种情况: 我们只需要将属性header=None即可。