使用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 相关文章推荐
在Django中同时使用多个配置文件的方法
Jul 22 Python
Python类的动态修改的实例方法
Mar 24 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
Python File readlines() 使用方法
Mar 19 Python
python画折线图的程序
Jul 26 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
Python 调用 Windows API COM 新法
Aug 22 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
python 实现全球IP归属地查询工具
Dec 18 Python
浅谈python数据类型及其操作
May 25 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
yii的CURD操作实例详解
2014/12/04 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
newxtree.js代码
2007/03/13 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
Node学习记录之cluster模块
2017/05/31 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
vant实现购物车功能
2020/06/29 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Python中取整的几种方法小结
2017/01/06 Python
详解Python3 基本数据类型
2019/04/19 Python
深入了解Django中间件及其方法
2019/07/26 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
三星法国官方网站:Samsung法国
2019/10/31 全球购物
程序员机试试题汇总
2012/03/07 面试题
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
工伤事故证明
2014/10/20 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
编写python程序的90条建议
2021/04/14 Python
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
基于Python编写一个监控CPU的应用系统
2022/06/25 Python