zoukankan      html  css  js  c++  java
  • 数据可视化基础专题(二):Pandas基础(一) excel导入与导出

    1.Excel

    1.1 Excel导入

    read_excel()

    pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, 
    engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None,
    keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0,
    convert_float=True, mangle_dupe_cols=True, **kwds)

    read_excel()方法使用Python的xlrd模块来读取Excel 2003(.xls)版的文件,而Excel 2007+ (.xlsx)版本的是用xlrd或者openpyxl模块来读取的。to_excel()方法则是用来把DataFrame数据存储为Excel格式.。(标红参数为常用参数)

    普通导入

    导入 Excel 数据主要使用到的方法是 Pandas 中的 read_excel() 。

    在进行导入操作的时候,要注意文件路径,这里的文件路径可以使用相对路径也可以使用绝对路径,但是不管哪种路径最基本的是要写对。

    import pandas as pd
    
    df = pd.read_excel("result_data.xlsx")# 相对路径
    print(df)
    
    # 输出内容
        plantform  read_num  fans_num  rank_num  like_num         create_date
    0      cnblog       215         0       118         0 2019-11-23 23:00:10
    1      juejin       177         0        -2         1 2019-11-23 23:00:03
    2        csdn      1652        69         0        24 2019-11-23 23:00:02
    3      cnblog       650         3       191         0 2019-11-22 23:00:15
    4      juejin       272         3       -23         1 2019-11-22 23:00:02
    ..        ...       ...       ...       ...       ...                 ...
    403    juejin       212         0        -1         2 2020-02-20 23:00:02
    404      csdn      1602         1         0         1 2020-02-20 23:00:01
    405    cnblog        19         0        41         0 2020-02-21 23:00:05
    406    juejin       125         1        -4         0 2020-02-21 23:00:02
    407      csdn      1475         8         0         3 2020-02-21 23:00:02
    
    [408 rows x 6 columns]

     Windows 的操作系统,文件路径默认是使用  ,如 D:DevelopmentProjectspython-learningpython-data-analysispandas-demo esult_data.xlsx ,我们在直接使用 Windows 的文件路径的时候需要在前面增加一个 r (转义符)避免路径中的  被转义,如下:

    import pandas as pd
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx")
    #df = pd.read_excel("D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx") 也可以这样
    print(df)
    
    # 输出内容
        plantform  read_num  fans_num  rank_num  like_num         create_date
    0      cnblog       215         0       118         0 2019-11-23 23:00:10
    1      juejin       177         0        -2         1 2019-11-23 23:00:03
    2        csdn      1652        69         0        24 2019-11-23 23:00:02
    3      cnblog       650         3       191         0 2019-11-22 23:00:15
    4      juejin       272         3       -23         1 2019-11-22 23:00:02
    ..        ...       ...       ...       ...       ...                 ...
    403    juejin       212         0        -1         2 2020-02-20 23:00:02
    404      csdn      1602         1         0         1 2020-02-20 23:00:01
    405    cnblog        19         0        41         0 2020-02-21 23:00:05
    406    juejin       125         1        -4         0 2020-02-21 23:00:02
    407      csdn      1475         8         0         3 2020-02-21 23:00:02
    
    [408 rows x 6 columns]

    指定导入 Sheet

    我们在使用 Excel 导入的时候,除了可以指定文件路径,还可以选择导入的 Sheet 

    在设置 Sheet 的时候,我们使用参数 sheet_name 来完成,示例如下:

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name='result_data')
    print(df)
    
    # 输出结果
        plantform  read_num  fans_num  rank_num  like_num         create_date
    0      cnblog       215         0       118         0 2019-11-23 23:00:10
    1      juejin       177         0        -2         1 2019-11-23 23:00:03
    2        csdn      1652        69         0        24 2019-11-23 23:00:02
    3      cnblog       650         3       191         0 2019-11-22 23:00:15
    4      juejin       272         3       -23         1 2019-11-22 23:00:02
    ..        ...       ...       ...       ...       ...                 ...
    403    juejin       212         0        -1         2 2020-02-20 23:00:02
    404      csdn      1602         1         0         1 2020-02-20 23:00:01
    405    cnblog        19         0        41         0 2020-02-21 23:00:05
    406    juejin       125         1        -4         0 2020-02-21 23:00:02
    407      csdn      1475         8         0         3 2020-02-21 23:00:02
    
    [408 rows x 6 columns]

    如果我们要使用一个完全不存在的 Sheet 名称会发生什么事情呢?例如我们将上面的 sheet_name 修改为 aaa ,来看下:

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name='aaa')
    print(df)
    
    # 输出结果
    Traceback (most recent call last):
      File "C:UsersinwsyAppDataLocalProgramsPythonPython37libsite-packagesxlrdook.py", line 474, in sheet_by_name
        sheetx = self._sheet_names.index(sheet_name)
    ValueError: 'aaa' is not in list
    
    During handling of the above exception, another exception occurred:

    可以看到这里抛出了 ValueError 的异常,并且提示 aaa 不在列表中。

    在指定 Sheet 名称的时候除了可以使用 Sheet 的具体名称,还可以使用 Sheet 的顺序,需要注意这个顺序开头是从 0 开始的。

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name=0)
    print(df)
    
    # 输出结果
        plantform  read_num  fans_num  rank_num  like_num         create_date
    0      cnblog       215         0       118         0 2019-11-23 23:00:10
    1      juejin       177         0        -2         1 2019-11-23 23:00:03
    2        csdn      1652        69         0        24 2019-11-23 23:00:02
    3      cnblog       650         3       191         0 2019-11-22 23:00:15
    4      juejin       272         3       -23         1 2019-11-22 23:00:02
    ..        ...       ...       ...       ...       ...                 ...
    403    juejin       212         0        -1         2 2020-02-20 23:00:02
    404      csdn      1602         1         0         1 2020-02-20 23:00:01
    405    cnblog        19         0        41         0 2020-02-21 23:00:05
    406    juejin       125         1        -4         0 2020-02-21 23:00:02
    407      csdn      1475         8         0         3 2020-02-21 23:00:02
    
    [408 rows x 6 columns]

    指定导入行索引

    我们在导入文件的时候,行索引默认是会使用从 0 开始的默认索引,如果对行索引有需求的话,可以使用 index_col 参数来设置行索引。

    比如我们现在设置 create_date 这个参数作为行索引,注意参数起始从 0 开始:

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name=0, index_col=5)
    print(df)
    
    # 输出结果
                        plantform  read_num  fans_num  rank_num  like_num
    create_date                                                          
    2019-11-23 23:00:10    cnblog       215         0       118         0
    2019-11-23 23:00:03    juejin       177         0        -2         1
    2019-11-23 23:00:02      csdn      1652        69         0        24
    2019-11-22 23:00:15    cnblog       650         3       191         0
    2019-11-22 23:00:02    juejin       272         3       -23         1
    ...                       ...       ...       ...       ...       ...
    2020-02-20 23:00:02    juejin       212         0        -1         2
    2020-02-20 23:00:01      csdn      1602         1         0         1
    2020-02-21 23:00:05    cnblog        19         0        41         0
    2020-02-21 23:00:02    juejin       125         1        -4         0
    2020-02-21 23:00:02      csdn      1475         8         0         3
    
    [408 rows x 5 columns]

    指定导入列索引

    同行索引一样,默认也是采用源数据的第一行作为列索引,同样,我们可以通过 header 进行列索引的设置, header 的默认参数为 0 ,也就是第一行,自定义可以使用其他行,将行号作为参数传入即可,我们演示一下使用第二行作为索引:

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name=0, header=1)
    print(df)
    
    # 输出结果
         cnblog   215    0  118  0.1 2019-11-23 23:00:10
    0    juejin   177    0   -2    1 2019-11-23 23:00:03
    1      csdn  1652   69    0   24 2019-11-23 23:00:02
    2    cnblog   650    3  191    0 2019-11-22 23:00:15
    3    juejin   272    3  -23    1 2019-11-22 23:00:02
    4      csdn  2202  129    0   37 2019-11-22 23:00:01
    ..      ...   ...  ...  ...  ...                 ...
    402  juejin   212    0   -1    2 2020-02-20 23:00:02
    403    csdn  1602    1    0    1 2020-02-20 23:00:01
    404  cnblog    19    0   41    0 2020-02-21 23:00:05
    405  juejin   125    1   -4    0 2020-02-21 23:00:02
    406    csdn  1475    8    0    3 2020-02-21 23:00:02
    
    [407 rows x 6 columns]

    指定导入行数

    有时候,如果我们只需要了解一下这个文件中有些什么数据,那么我们就不需要导入所有的数据,可以使用 nrows 来指定导入的行数,这里我们选择导入 Excel 的前 100 行:

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name=0, nrows=100)
    print(df)
    
    # 输出结果
       plantform  read_num  fans_num  rank_num  like_num         create_date
    0     cnblog       215         0       118         0 2019-11-23 23:00:10
    1     juejin       177         0        -2         1 2019-11-23 23:00:03
    2       csdn      1652        69         0        24 2019-11-23 23:00:02
    3     cnblog       650         3       191         0 2019-11-22 23:00:15
    4     juejin       272         3       -23         1 2019-11-22 23:00:02
    ..       ...       ...       ...       ...       ...                 ...
    95      csdn      1492        88         0        13 2019-10-23 23:51:37
    96    cnblog      1338         2       219         0 2019-10-22 23:33:33
    97    juejin       204         1        -6         6 2019-10-22 23:18:19
    98      csdn      1064        61      7094        18 2019-10-22 23:18:08
    99    cnblog      -493         1        69         0 2019-10-21 22:38:32
    
    [100 rows x 6 columns]

    从结果的数据统计,可以看到我们成功的导入了前 100 行的数据,虽然行索引只有 99 ,是因为么我们 Excel 的头也占了一行。

    指定导入列

    有时候,我们的 Excel 中的列太多了,而我们处理的数据又不需要那么多列的时候,我们可以使用 usecols 来指定我们需要导入的列

    import pandas as pd
    
    df = pd.read_excel(r"D:DevelopmentProjectspython-learningpython-data-analysispandas-demo
    esult_data.xlsx", sheet_name=0, usecols=[0, 1, 2])
    print(df)
    
    # 输出结果
        plantform  read_num  fans_num
    0      cnblog       215         0
    1      juejin       177         0
    2        csdn      1652        69
    3      cnblog       650         3
    4      juejin       272         3
    ..        ...       ...       ...
    403    juejin       212         0
    404      csdn      1602         1
    405    cnblog        19         0
    406    juejin       125         1
    407      csdn      1475         8
    
    [408 rows x 3 columns]

    注意这里的 usecols 的参数是一个数组,表示我们将要导入的列。

    1.2 Excel导出

    在做数据导出前,我们需要现有一份 DataFrame 数据,这里的数据小编偷懒,就直接读取之前示例中的 Excel 了,当然这么做并没有什么意义,仅用来演示导出数据。

    在 Pandas 中导出 Excel 的时候,需要使用到的方法是 to_excel() 方法,在导出 Excel 文件的时候,一定要写对文件路径,我们在前面的文章中有介绍过文件路径的书写方法,直接上示例:

    import pandas as pd
    
    # 数据读取
    df = pd.read_excel("table_join_exp.xlsx", sheet_name='Sheet1')
    
    # 数据导出
    df.to_excel(excel_writer=r'D:DevelopmentProjectsdemo.xlsx')

    我们来看下 to_excel() 这个方法的语法:DataFrame.to_excel(self, excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, 

    columns=None, header=True, index=True, index_label=None, 
    startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf',
    verbose=True, freeze_panes=None) → None

    to_excel() 这个方法中的参数还是比较多的,我们挑几个常用的介绍一下:

    • excel_writer :文件路径或现有的ExcelWriter
    • sheet_name :字符串,默认是 “Sheet1”
    • float_format :格式化浮点数的字符串
    • header :写出列名。如果给定字符串列表,则假定它是列名称的别名。
    • index :写索引
    • columns :设置要导出的列
    • encoding :编码格式,一般我们选择 'utf-8' 。
    • na_rep :缺失值处理
    • inf_rep :无穷值的处理

    接下来看示例,这个示例小编会尽量写得复杂一点,把我们上面的属性尽可能的都用上,并且标注好注释:

    df.to_excel(excel_writer=r'D:DevelopmentProjectsdemo.xlsx',
                sheet_name='测试文档', # 创建 sheet 名称
                index=False,  # 设置索引不显示
                columns=['编号', '姓名'],  # 设置要导出的列
                encoding='utf-8', # 设置编码格式
                na_rep='0', # 缺失值处理
                inf_rep='inf'  # 无穷值处理
                )

    示例代码与文件 https://github.com/meteor1993/python-learning/tree/master/python-data-analysis/pandas-demo

  • 相关阅读:
    memcached学习笔记——存储命令源码分析上篇
    个人理解正则表达式——懒惰匹配
    Symfony2中的设计模式——装饰者模式
    Symfony2源码分析——启动过程2
    Symfony2 HttpKernel事件驱动
    memcached学习笔记——连接模型
    阅读优秀代码是提高开发人员修为的一种捷径
    Linux下部署Symfony2对app/cache和app/logs目录的权限设置
    Symfony2源码分析——启动过程1
    Symfony2 EventDispatcher组件
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12667398.html
Copyright © 2011-2022 走看看