zoukankan      html  css  js  c++  java
  • pandas.read_csv用法(转)

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

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

    640?wx_fmt=png

    从上图可以看出,我们要做的工作就是把存储在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

  • 相关阅读:
    ETL概述
    POI操作Excel常用方法总结
    段的创建表user_segments
    定位导致物化视图无法快速刷新的原因
    在shell脚本中调用sqlplus
    Oracle 字符集的查看和修改
    Java Web发布
    JSP搭建
    完全卸载oracle11g步骤:
    剑指offer——二叉排序树(BST)、平衡二叉树(AVL)
  • 原文地址:https://www.cnblogs.com/shixisheng/p/9553033.html
Copyright © 2011-2022 走看看