的数据结构DataFrame,几乎可以对数据进行任何你想要的操作。

由于现实世界中数据源的格式非常多,pandas也支持了不同数据格式的导入方法,本文介绍pandas如何从csv文件中导入数据。

从上图可以看出,我们要做的工作就是把存储在csv格式中的数据读入并转换成DataFrame格式。
pandas提供了一个非常简单的api函数来实现这个功能:read_csv()

1. 通过read_csv接口读入csv文件中的数据

下面是一个简单的示例:


  1. import pandas as pd

  2. CSV_FILE_PATH = './test.csv'

  3. df = pd.read_csv(CSV_FILE_PATH)

  4. print(df.head(5))

只要简单地指定csv文件的路径,便可以得到DataFrame格式的数据df。对于理想情况下的数据,导入过程就是这么简单!

下面考虑这种情况:假设csv文件头部有几个无效行,那么打印出来的结果可能如下所示:


  1.                      1          2      3       4

  2. 0             datetime       host    hit  volume

  3. 1  2018-07-24 09:00:00  weibo.com     20    1020

  4. 2  2018-07-25 09:00:00     qq.com  no 20    1028

  5. 3  2018-07-26 19:00:00   sina.com     25    1181

  6. 4  2018-07-27 21:00:00   sohu.com     15    4582

pandas把【1,2,3,4】这组无效数据当作了column name;而实际上,我们更偏向于将【datetime,host,hit,volume】这组数据当作column name。对于这种情况,read_csv()函数提供了一个参数:skiprows,用于指定跳过csv文件的头部的前几行。在这里,我们跳过1行即可。


  1. import pandas as pd

  2. CSV_FILE_PATH = './test.csv'

  3. df = pd.read_csv(CSV_FILE_PATH, skiprows=1)

  4. print(df.head(5))

得到的结果如下所示:


  1.              datetime       host    hit  volume

  2. 0  2018-07-24 09:00:00  weibo.com     20    1020

  3. 1  2018-07-25 09:00:00     qq.com  no 20    1028

  4. 2  2018-07-26 19:00:00   sina.com     25    1181

  5. 3  2018-07-27 21:00:00   sohu.com     15    4582

2. 处理csv文件中的无效数据

pandas可以自动推断每个column的数据类型,以方便后续对数据的处理。还以上文中的数据为例,通过如下代码:


  1. import pandas as pd

  2. CSV_FILE_PATH = './test.csv'

  3. df = pd.read_csv(CSV_FILE_PATH)

  4. print(df.head(5))

  5. print('datatype of column hit is: ' + str(df['hit'].dtypes))

得出的结果:


  1.              datetime       host  hit  volume

  2. 0  2018-07-24 09:00:00  weibo.com   20    1020

  3. 1  2018-07-25 09:00:00     qq.com   20    1028

  4. 2  2018-07-26 19:00:00   sina.com   25    1181

  5. 3  2018-07-27 21:00:00   sohu.com   15    4582

  6. datatype of column hit is: int64

pandas将hit这一列的数据类型判定为了int64,这显然方便未来我们对于该列数据的运算。
但是在实际情况中,我们经常会面临数据缺失的问题,如果出现这种情况,我们往往会用一些占位符来表达。假设,我们用missing这个占位符来表示数据缺失,仍使用上述代码,来探索下会发生些什么:


  1.              datetime       host      hit   volume

  2. 0  2018-07-24 09:00:00  weibo.com       20     1020

  3. 1  2018-07-25 09:00:00     qq.com       20     1028

  4. 2  2018-07-26 19:00:00   sina.com  missing  missing

  5. 3  2018-07-27 21:00:00   sohu.com       15     4582

  6. datatype of column hit is: object

由于hit这一列中出现了missing这个字符串,pandas将hit这一列的数据类型判断成了object。这会给我们对该列数据的运算带来影响。例如,假设我们要计算hit列前两行数据的和,代码如下:


  1. print(df['hit'][0] + df['hit'][1])

结果是:


  1. 2020

本来我们想要的是数学运算结果,但得到的却是一个字符串拼接结果。这就是由于数据类型判断失误带来的严重影响。
对于这种情况,read_csv()函数也提供了一个简单的处理方式,只需要通过na_value参数指定占位符,pandas便会在读入数据的过程中自动将这些占位符转换成NaN,从而不影响pandas对column数据类型的正确判断。
示例代码:


  1. import pandas as pd

  2. CSV_FILE_PATH = './test.csv'

  3. df = pd.read_csv(CSV_FILE_PATH, skiprows=0, na_values=['missing')

  4. print(df.head(5))

  5. print('datatype of column hit is: ' + str(df['hit'].dtypes))

  6. print(df['hit'][0] + df['hit'][1])

运行结果如下:


  1.              datetime       host   hit  volume

  2. 0  2018-07-24 09:00:00  weibo.com  20.0  1020.0

  3. 1  2018-07-25 09:00:00     qq.com  20.0  1028.0

  4. 2  2018-07-26 19:00:00   sina.com   NaN     NaN

  5. 3  2018-07-27 21:00:00   sohu.com  15.0  4582.0

  6. datatype of column hit is: float64

  7. 40.0

可以看到,pandas将数据集中的missing单元全部转换为了NaN,并成功判断出hit这一列的数据类型。

3. 总结

通过一个简单的read_csv()函数,实际可以做到如下几件事:

  • 通过指定的文件路径,从本地读取csv文件,并将数据转换成DataFrame格式

  • 更正数据集的头部(column)

  • 正确处理缺失数据

  • 推断每一列的数据类型

当然,read_csv()函数还有一系列其他参数来应对各种情况,遇到具体问题的同学可参考其接口指南。

转自:https://blog.csdn.net/O4dC8OjO7ZL6/article/details/81117442

pandas.read_csv用法(转)的更多相关文章

  1. pandas.read_csv() 部分参数解释

    read_csv()所有参数 pandas.read_csv( filepath_or_buffer, sep=',', delimiter=None, header='infer', names=N ...

  2. API:详解 pandas.read_csv

    pandas.read_csv 作为常用的读取数据的常用API,使用频率非常高,但是API中可选的参数有哪些呢? pandas项目代码 答案是: .read_csv(filepath_or_buffe ...

  3. pandas read_csv读取大文件的Memory error问题

    今天在读取一个超大csv文件的时候,遇到困难:首先使用office打不开然后在python中使用基本的pandas.read_csv打开文件时:MemoryError 最后查阅read_csv文档发现 ...

  4. pandas.read_csv()参数(转载)

    文章转载地址 pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/p ...

  5. pandas.read_csv()函数读取文件时,关于“header=None”影响读取列数区间的右闭合总结

    对于一个没有字段名标题的数据,如data.csv 1.获取数据内容.pandas.read_csv("data.csv")默认情况下,会把数据内容的第一行默认为字段名标题. imp ...

  6. pandas.read_csv to_csv参数详解

    pandas.read_csv参数整理   读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/pandas ...

  7. pandas的用法

    1.a = pandas.read_csv(filepath):读取.csv格式的文件到列表a中,文件在路径filepath中 pandas.core.frame.DataFrame是pandas的核 ...

  8. 被 Pandas read_csv 坑了

    被 Pandas read_csv 坑了 -- 不怕前路坎坷,只怕从一开始就走错了方向 Pandas 是python的一个数据分析包,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的 ...

  9. pandas.read_csv参数详解

    读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/pandas-docs/stable/io.html 参 ...

随机推荐

  1. linux之 redis 的rdb 转 aof 及主从复

    redis持久化RDB基于快照的持久化通过save命令,强制持久化  在redis.conf中dbfilename  dbmp.rdbsave  900 1save 300 10save 60  10 ...

  2. w3cschool脚本算法编程实战课程

    部分源码==>https://github.com/calamus0427/commonJS 翻转字符串算法挑战 function reverseString(str) { str = str. ...

  3. django 之admin使用

    Admin注册 内容发布的部分由网站的管理员负责查看.添加.修改.删除数据,开发这些重复的功能是一件单调乏味.缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块. 1)准备工作 ...

  4. apt-get 常用命令总结

    apt-get  高级包装工具(英语:Advanced Packaging Tools,简称:APT)是Debian及其衍生发行版(如:ubuntu)的软件包管理器.APT可以自动下载,配置,安装二进 ...

  5. Https 忽略证书\使用自定义证书的java代码实现

    public SSLContext createIgnoreVerifySSL() throws KeyManagementException, NoSuchAlgorithmException, K ...

  6. 【Linux】【secureCRT】下载,安装,激活攻略

    以前公司使用的是SSH访问Linux服务器,今天争取了能看到数据,问了同事使用的是secureCRT,然后自己就装了一个. 下载地址:https://www.vandyke.com/download/ ...

  7. 剑指Offer(二):替换空格

    说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...

  8. python中的upper、lower、capitalize、title

    upper()字符串中字母由小写变为大写 lower()字符串中字母由大写变为小写 capitalize()字符串中字母首字母大写其余小写 title()字符串中字母每个单词的首字母大写其余小写 举个 ...

  9. c#序列化Json和反序列化

    1.首先确保程序集中添加了  System.Web.Extensions    DLL引用 2.代码中添加命名空间:using System.Web.Script.Serialization; nam ...

  10. Python基础4 迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...