上面一篇文章有记录pandas构造数据框的方式有二维数组,字典,嵌套的列表和元组等,本篇用于介绍通过外部数据读取的方式来构造数据框。

python读取外部数据集的时候,这些数据集可能包含在文本文件(csv,txt),电子表格Excel和数据库中(Mysql,SQL server)等,那么如何来用pandas来实现这些

文件,表格和数据库的读取呢?

1.文本文件的读取

read_table函数介绍

函数原型:

pd.read_table(filepath_or_buffer,sep='t',header='infer',names=None,index_col=None,usecols=None,dtype=None,converters=None,skiprows=None,

      skipfooter=None,nrows=None,na_values=None,skip_blank_lines=True,parse_dates=False,thousands=None,comment=None,encoding=None)

各参数的含义:

file_path_or_buffer:指定txt或csv文件所在的具体路径

sep:指定数据集中各字段之间的分隔符,默认为Tab制表符

header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称

names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头

index_col:指定原数据集中的某些列作为数据框的行索引(标签)

usecols:指定需要读取原数据集中的哪些变量名;

dtype:读取数据时,可以为原数据的每个字段设置不同的数据类型

converters:通过字典格式,为数据集中的某些字段设置转换函数

skiprows:数据读取时,指定需要跳过原数据集开头的行数

skipfooter:数据读取时,指定需要跳过原数据集末尾的行数

nrows:指定读取的数据的行数

na_values:指定原数据集中哪些特征的值作为缺失值

skip_blank_lines:读取数据时是否需要跳过原数据集中的空白行,默认为True

parse_dates:如果参数值为True,则尝试解析数据框的行索引;如果参数为列表,则尝试解析对应的日期列;如果参数为嵌套列表,则将某些列合并为日期列;

      如果参数为字典,则解析对应的列(字典中的值),并生成新的字段名(字典中的键)。

thousands:指定原始数据集中的千分位符

comment:指定注释符,在读取数据时,如果碰到行首指定的注释符,则跳过改行

encoding:如果文件中含有中文,有时需要指定字符编码。

涉及的参数比较多,用的时候有些参数是用不上的,根据需要设置,如下示例:

有txt文件,内容如下:

'''

数据来源:某公司人事记录表
时间范围:2019.1.1~2019.10.31

year,month,day,gender,occupation,income
1990,3,7,男,销售经理,6&000
1989,8,10,女,化妆师,8$500
# 1991,10,10,男,后端开发,13&500
1992,10,7,女,前端设计,6&500
1985,6,15,男,数据分析师,18&000

该数据集仅用于参考!
不可以用于他用!
备注于2019年11月。

'''

处理数据之前,先观察数据有以下特点,思考如何解决:

1.数据集并不是从第一行开始的,前面几行实际上是数据集的来源说明,读取数据时需要注意什么问题。

2.数据的末尾3行仍然不是需要读入的数据,如何避免后3行数据的读入。

3.中间部分的数据,第四行前加了#号,表示不需要读取改行数据,改如何处理

4.数据集中的收入一行,千分位符是&,如何将该字段读入为正常的数值型数据

5.如果需要将year,month和day三个字段解析为新的birthday字段,该如何做到。

6.数据集中含有中文,一般在读取含中文的文本文件是都会出现编码错误,该如何解决。

import pandas as pd
test_Data = pd.read_table(r'D:\data_test01.txt',sep=',',header='infer',
      skiprows=2,skipfooter=3,parse_dates={'birthday':[0,1,2]},
      comment='#',encoding='utf-8',thousands='&',engine='python')
test_Data

out:

这里补充说明一下utf-8编码的问题:encoding应该是用utf-8的,没有错误;但是我开始的时候怎么搞都是说utf-8的编码问题,我查阅了很多方法都不行;后面参考了一些人的经验改成,

encoding = 'ISO-8859-1',于是显示成了如下乱码的样子,至少没有报错了。花了我不少时间去研究都没有找到处理方式(文件内容我也改成UTF-8的编码了);

然后参考了一本相关的书,提示到,我们处理txt文件的时候,只在txt里面更改编码方式加上设置encoding=utf-8 是没有效果的,要把文件另存为,UTF-8编码格式的,然后替换原文件,如下:

然后再次运行,就得出了正常的结果;也算是一个处理中文编码问题的经验吧。

pandas外部数据的读取构造数据框-文本文件读取(一种utf-8中文编码乱码处理经验)的更多相关文章

  1. 机器学习之数据预处理,Pandas读取excel数据

    Python读写excel的工具库很多,比如最耳熟能详的xlrd.xlwt,xlutils,openpyxl等.其中xlrd和xlwt库通常配合使用,一个用于读,一个用于写excel.xlutils结 ...

  2. 浅谈python之利用pandas和openpyxl读取excel数据

    在自学到接口自动化测试时, 发现要从excel中读取测试用例的数据, 假如我的数据是这样的: 最好是每行数据对应着一条测试用例, 为方便取值, 我选择使用pandas库, 先安装 pip instal ...

  3. pandas.read_sql_query()读取数据库数据用chunksize的坑

    最近一项工作需要读取数据库中1500万条数据,考虑到数据量太大,不方便直接一次性读取,不然会内存爆炸.想到用pandas.read_sql_query()里有一个chunksize可以分批返回chun ...

  4. pandas读取保存数据

    将本人使用过的一些操作记录下来 1.读取数据,使用:data = pd.read_csv('./data/file.csv') 2.数据处理,如果你要修改某一个数据,其实把DATAFRAME数据看做是 ...

  5. js读取json数据(php传值给js)

    <?php $array =array('fds','fdsa','fdsafasd');  // json_encode($array); ?> <html> <hea ...

  6. SQLite数据库如何存储和读取二进制数据

    SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...

  7. jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL

    这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...

  8. Delphi中使用python脚本读取Excel数据

    Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  9. ng1 http 读取json数据

    在前端开发过程中,有时后端还没开发出接口,需要经常自己构造获取本地mock数据. AngularJS XMLHttpRequest $http 是 AngularJS 中的一个核心服务,用于读取远程服 ...

随机推荐

  1. IO流——Properties类、序列化流、反序列化流、打印流、commons-IO

    一. Properties类 1. Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 ...

  2. 配置mongoDB的错误

    1,将启动配置到服务的时候没有反应,后来发现没有用管理员模式打开shell命令,所以没有反应. 2,用管理员模式的时候报错 格式问题,将由空格的路径用“”包住即可 3.启动的时候报错windows不能 ...

  3. 中国剩余定理(CRT)及其扩展(EXCRT)详解

    问题背景   孙子定理是中国古代求解一次同余式方程组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第 ...

  4. 玩转 SpringBoot2.x 之整合邮件发送

    序 在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册,通过邮件找回密码等:又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多. 原文地址:https://www.mm ...

  5. XSSFWorkbook

    支持2007以后的 此类与HSSFWorkbook(支持2007之前) 类似,读取文件时把全部的内容都存放到内存中,关闭输入流后. 内存与硬盘完全是毫无关系的两份数据,所有的操作都是对内存的操作,最后 ...

  6. Angular 10材质的模态弹出示例和教程

    在本教程中,我们将通过示例使用Angular 10材质构建模式弹出窗口. 在这里,我们将研究创建Angular 10项目,安装和设置Angular 10材质,以及创建自定义材质模块文件. 在本教程中, ...

  7. 【NOIP2016】天天爱跑步 题解(LCA+桶+树上差分)

    题目链接 题目大意:给定一颗含有$n$个结点的树,每个结点有一个权值$w$.给定$m$条路径,如果一个点与路径的起点的距离恰好为$w$,那么$ans[i]++$.求所有结点的ans. 题目分析 暴力的 ...

  8. 重学c#系列——异常续[异常注意事项](七)

    前言 对上节异常的补充,也可以说是异常使用的注意事项. 正文 减少try catch的使用 前面提及到,如果一个方法没有实现该方法的效果,那么就应该抛出异常. 如果有约定那么可以按照约定,如果约定有歧 ...

  9. 阿里Canal中间件的初步搭建和使用

    一.前言 Binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息.而Binlog格式也有三种,分别为STATEMENT.ROW.MIXED.STATM ...

  10. 还在纠结学什么编程语言吗?Python可能会“教”你做人

    这几年为什么Python在中国就火起来了? Python这个东西国,大概是从2017年末开始,突然就火了起来的.此前,对于Python,乃至编程,绝大多数程度上都是专业人士的话题,在普通大众层面上起不 ...