使用pandas读取文件的实现


Posted in Python onJuly 31, 2019

pandas可以将读取到的表格型数据(文件不一定要是表格)转成DataFrame类型的数据结构,然后我们可以通过操作DataFrame进行数据分析,数据预处理以及行和列的操作等。下面介绍一些常用读取文件的方法

1、read_csv函数

功能:从文件、URL、文件新对象中加载带有分隔符的数据,默认分隔符是逗号。

data.txt

a,b,c,d,name
1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++
data = pd.read_csv("data.txt")
  print(data)
  '''
    a  b  c  d  name
  0 1  2  3  4 python
  1 5  6  7  8  java
  2 9 10 11 12   c++
  '''

2、read_table函数

功能:从文件、URL、文件型对象中加载带分隔符的数据,默认分隔符为制表符("\t")。
data.txt的内容还是不变,我们可以通过指定read_table的sep参数来修改默认的分隔符。

data = pd.read_table("data.txt",sep=",")
  print(data)
  '''
    a  b  c  d  name
  0 1  2  3  4 python
  1 5  6  7  8  java
  2 9 10 11 12   c++
  '''

3、读取没有标题的文件

data.txt

1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++
data = pd.read_csv("data.txt")
  #默认将第一行作为标题
  print(data)
  '''
    1  2  3  4 python
  0 5  6  7  8  java
  1 9 10 11 12  c++
  '''
  #设置header参数,读取文件的时候没有标题
  data1 = pd.read_csv("data.txt",header=None)
  print(data1)
  '''
    0  1  2  3    4
  0 1  2  3  4 python
  1 5  6  7  8  java
  2 9 10 11 12   c++
  '''
  #设置names参数,来设置文件的标题
  data2 = pd.read_csv("data.txt",names=["a","b","c","d","name"])
  print(data2)
  '''
    a  b  c  d  name
  0 1  2  3  4 python
  1 5  6  7  8  java
  2 9 10 11 12   c++
  '''

4、读取文件设置列索引

#设置names参数,来设置文件的标题,设置index_col参数来设置列索引
  data2 = pd.read_csv("data.txt",names=["a","b","c","d","name"],index_col="name")
  print(data2)
  '''
      a  b  c  d
  name
  python 1  2  3  4
  java  5  6  7  8
  c++   9 10 11 12
  '''

如果不设置列索引,默认会使用从0开始的整数索引。当对表格的某一行或列进行操作之后,在保存成文件的时候你会发现总是会多一列从0开始的列,如果设置index_col参数来设置列索引,就不会出现这种问题了。

a、指定多个列为列索引产生一个层次化索引

一个值由两个列索引(key1和kye2)和一个行索引(value1或value2)来决定,可以将其理解为一个三维数据,三个点来构成一个坐标位置。

data.txt

key1,key2,value1,value2
a,a,1,2
a,b,3,4
b,c,5,6
b,d,7,8
c,e,9,10
c,f,11,12
data = pd.read_csv("data.txt",index_col=["key1","key2"])
  print(data)
  '''
        value1 value2
  key1 key2
  a  a     1    2
     b     3    4
  b  c     5    6
     d     7    8
  c  e     9   10
     f     11   12
  '''

5、对于不规则分隔符,使用正则表达式读取文件

文件中的分隔符采用的是空格,那么我们只需要设置sep=" "来读取文件就可以了。当分隔符并不是单个的空格,也许有的是一个空格有的是多个空格时,如果这个时候还是采用sep=" "来读取文件,也许你就会得到一个很奇怪的数据,因为它会将空格也做为数据。

data.txt

name a  b c  d
python  1 2 3   4
java 5 6 7 8
c++ 9  10  11 12
data = pd.read_csv("data.txt",sep=" ")
  print(data)
  '''
      name  a Unnamed: 2 Unnamed: 3  b Unnamed: 5  c Unnamed: 7 \
  python  NaN NaN     1.0     NaN  2     3.0 NaN     NaN  
  java   5.0 6.0     NaN     7.0  8     NaN NaN     NaN  
  c++   NaN 9.0     NaN     NaN 10     NaN NaN    11.0  
  
      Unnamed: 8 Unnamed: 9  d 
  python     NaN     NaN 4.0 
  java      NaN     NaN NaN 
  c++      NaN    12.0 NaN 
  '''

使用正则表达式进行分割就可以避免上面问题的发生

data = pd.read_csv("data.txt",sep="\s+")
  print(data)
  '''
     name a  b  c  d
  0 python 1  2  3  4
  1  java 5  6  7  8
  2   c++ 9 10 11 12
  '''

6、跳行读取文件

有的时候,你会遇到表格中的某些行数据你并不需要。可以通过skiprows参数来跳过这些行。

data.txt

#data.txt
name,a,b,c,d
python,1,2,3,4
#hello
java,5,6,7,8
#word
c++,9,10,11,12
#通过skiprows参数来设置跳过行,从0开始
  data = pd.read_csv("data.txt",skiprows=[0,3,5])
  print(data)
  '''
     name a  b  c  d
  0 python 1  2  3  4
  1  java 5  6  7  8
  2   c++ 9 10 11 12
  '''

7、读取含有缺失值的文件

使用pandas在读取文件的时候,pandas会默认将NA、-1.#IND、NULL等当作是缺失值,pandas默认使用NaN进行代替。

data.txt

name,a,b,c,d
python,1,NA,3,4
java,5,6,7,NULL
c++,-1.#IND,10,,12
data = pd.read_csv("data.txt")
  print(data)
  '''
     name  a   b  c   d
  0 python 1.0  NaN 3.0  4.0
  1  java 5.0  6.0 7.0  NaN
  2   c++ NaN 10.0 NaN 12.0
  '''

也许有的时候也许pandas默认被当作的缺失值还不能满足你的要求,我们可以通过设置na_values,将指定的值替换成为NaN值

data1 = pd.read_csv("data.txt",na_values=["java","c++"])
  print(data1)
  '''
     name  a   b  c   d
  0 python 1.0  NaN 3.0  4.0
  1   NaN 5.0  6.0 7.0  NaN
  2   NaN NaN 10.0 NaN 12.0
  '''

也许有时候你还会遇到,你想将某个值替换成为NaN,但是可能有多个列都包含了这个值,而我们却不想替换所有的列,我们可以通过一个字典的形式来设置na_values参数,字典的键就是列索引,值就是你要替换的值。

data.txt

name,a,b,c,d
python,1,NA,3,4
java,5,6,python,NULL
c++,-1.#IND,10,,c++
#将python和c++都用NaN进行替代,将所有的python和c++都替换成了NaN
  data1 = pd.read_csv("data.txt",na_values=["python","c++"])
  print(data1)
  '''
    name  a   b  c  d
  0  NaN 1.0  NaN 3.0 4.0
  1 java 5.0  6.0 NaN NaN
  2  NaN NaN 10.0 NaN NaN
  '''

只将第一列的python和c++替换为NaN

#将python和c++都用NaN进行替代
  dic = {"name":["python","c++"]}
  data1 = pd.read_csv("data.txt",na_values=dic)
  print(data1)
  '''
    name  a   b    c  d
  0  NaN 1.0  NaN    3  4
  1 java 5.0  6.0 python NaN
  2  NaN NaN 10.0   NaN c++
  '''

8、read_csv和read_tabel的参数介绍

read_csv和read_table函数有很多的参数,下面对一些重点参数进行介绍。

参数:

path:表示文件系统位置、URL、文件型对象的字符串。

sep或delimiter:用于对行中各字段进行拆分的字符序列或正则表达式。

header:用作列名的行号。默认为0(第一行),如果文件没有标题行就将header参数设置为None。

index_col:用作行索引的列编号或列名。可以是单个名称/数字或有多个名称/数字组成的列表(层次化索引)。

names:用于结果的列名列表,结合header=None,可以通过names来设置标题行。

skiprows:需要忽略的行数(从0开始),设置的行数将不会进行读取。

na_values:设置需要将值替换成NA的值。

comment:用于注释信息从行尾拆分出去的字符(一个或多个)。

parse_dates:尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。除此之外,参数可以指定需要解析的一组列号或列名。如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作。

keep_date_col:如果连接多列解析日期,则保持参与连接的列。默认为False。

converters:由列号/列名跟函数之间的映射关系组成的字典。如,{"age:",f}会对列索引为age列的所有值应用函数f。

dayfirst:当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012   ---> June 7 , 2012)。默认为False。

date_parser:用于解析日期的函数。

nrows:需要读取的行数。

iterator:返回一个TextParser以便逐块读取文件。

chunksize:文件块的大小(用于迭代)。

skip_footer:需要忽略的行数(从文件末尾开始计算)。

verbose:打印各种解析器输出信息,如“非数值列中的缺失值的数量”等。

encoding:用于unicode的文本编码格式。例如,"utf-8"或"gbk"等文本的编码格式。

squeeze:如果数据经过解析之后只有一列的时候,返回Series。

thousands:千分位分隔符,如","或"."。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
Python从函数参数类型引出元组实例分析
May 28 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
python实现QQ邮箱发送邮件
Mar 06 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
python文件排序的方法总结
Sep 13 Python
python3实现mysql导出excel的方法
Jul 31 #Python
Django接收post前端返回的json格式数据代码实现
Jul 31 #Python
python快速编写单行注释多行注释的方法
Jul 31 #Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 #Python
利用Python检测URL状态
Jul 31 #Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 #Python
Python Web程序搭建简单的Web服务器
Jul 31 #Python
You might like
thinkphp的静态缓存用法分析
2014/11/29 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
js 作用域和变量详解
2017/02/16 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
在python中bool函数的取值方法
2018/11/01 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
公证书样本
2014/04/10 职场文书
大学生社团活动总结
2014/04/26 职场文书
销售目标责任书
2014/07/23 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
高考升学宴主持词
2019/06/21 职场文书