使用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的Django框架实现事务交易管理的教程
Apr 20 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
Django权限控制的使用
Jan 07 Python
浅谈怎么给Python添加类型标注
Jun 08 Python
Python 阶乘详解
Oct 05 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Python函数式编程
2017/07/20 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
python求前n个阶乘的和实例
2020/04/02 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
python批量修改文件名的示例
2020/09/27 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
12岁生日感言
2014/01/21 职场文书
班级活动策划书
2014/02/06 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
体育教师个人总结
2015/02/09 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS