使用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中解析XML数据的方法
Oct 15 Python
python生成圆形图片的方法
Mar 25 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
python中scikit-learn机器代码实例
Aug 05 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
python用requests实现http请求代码实例
Oct 31 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
利用python进行文件操作
Dec 04 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 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从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
破解Session cookie的方法
2006/07/28 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
Python requests模块session代码实例
2020/04/14 Python
Python try except else使用详解
2021/01/12 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
生产车间主任的个人自我鉴定
2013/10/25 职场文书
市场营销专业推荐信
2013/11/03 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
新书吧创业计划书
2014/01/31 职场文书
绩效工资实施方案
2014/03/15 职场文书
仓库规划计划书
2014/04/28 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
JS class语法糖的深入剖析
2022/07/07 Javascript