暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python-60 pandas之excel/csv/sql/spss读写

Rhonin晴朗台风天 2021-09-28
494

 pandas库是数据分析非常常用的库,我还是想把这个库的基础打牢。



01


文件读取写入


大家对之前文件的打开关闭、读取写入是否还记得?咱们复习一下:



02


Excel读取:pandas.read_excel


那我们来看看pandas是如何操作的:(我估计我会喜新厌旧了,哈哈),大家准备下之前做练习用的一个excel表,然后用anaconda集成工具打开。

读取: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, na_filter=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=None, mangle_dupe_cols=True, storage_options=None)

针对列,其用到的参数为:header,usecols,names,index_col

针对行,其所用到的参数为: skipfooter, skiprows, nrows

通用格式:dtype、converters(日期数据)、true_values和false_value

日期格式的转换: parse_dates 与 date_parser

空值处理:na_values,keep_defalt_na,na_filter


1、io:文件路径名

    xlsx=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx')
    xlsx
    Out[8]:
    cno cname cpno ccredit
    0 1 数据库 5.0 4
    1 2 数学 NaN 2
    2 3 信息系统 1.0 4
    3 4 操作系统 6.0 3
    4 5 数据结构 7.0 4
    5 6 数据处理 NaN 2
    6    7  PASCAL语言   6.0        4

    2、sheet_name:str、int、list 或 None,默认为 0

    字符是表示的是该表的名字,数字表示的是表的位置(从0开始),数字和字符是请求单个表格;列表形式的是请求多个表格.赋值为None是请求全部的表格

      data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',['Sheet1','Sheet2'])
      data
      Out[28]:
      {'Sheet1': cno cname cpno ccredit
      0 1 数据库 5.0 4
      1 2 数学 NaN 2
      2 3 信息系统 1.0 4
      3 4 操作系统 6.0 3
      4 5 数据结构 7.0 4
      5 6 数据处理 NaN 2
      6 7 PASCAL语言 6.0 4,
      'Sheet2': cno cname cpno ccredit
      0 10 统计 5 5}


      data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',sheet_name=None)
      data
      Out[30]:
      {'Sheet1': cno cname cpno ccredit
      0 1 数据库 5.0 4
      1 2 数学 NaN 2
      2 3 信息系统 1.0 4
      3 4 操作系统 6.0 3
      4 5 数据结构 7.0 4
      5 6 数据处理 NaN 2
      6 7 PASCAL语言 6.0 4,
      'Sheet2': cno cname cpno ccredit
       0   10    统计     5        5}

      3、header:指定作为列名的行,默认0,即取第一行的值为列名。数据为列名行以下的数据;若数据不含列名,则设定 header = None

        data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',header=3)
        data
        Out[3]:
        3 信息系统 1 4
        0 4 操作系统 6.0 3
        1 5 数据结构 7.0 4
        2 6 数据处理 NaN 2
        3 7 PASCAL语言 6.0 4


        data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',header=0)
        data
        Out[5]:
        cno cname cpno ccredit
        0 1 数据库 5.0 4
        1 2 数学 NaN 2
        2 3 信息系统 1.0 4
        3 4 操作系统 6.0 3
        4 5 数据结构 7.0 4
        5 6 数据处理 NaN 2
        6 7 PASCAL语言 6.0 4


        data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',header=[1,3])
        data
        Out[7]:
        1 数据库 5 4
        3 信息系统 1 4
        0 4 操作系统 6.0 3
        1 5 数据结构 7.0 4
        2 6 数据处理 NaN 2
        3 7 PASCAL语言 6.0 4

        4、names:array-like, default None
        names:指定列的名字,传入一个list数据,默认为None

          data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',names=['a','b','c','d'])
          data
          Out[30]:
          a b c d
          0 1 数据库 5.0 4
          1 2 数学 NaN 2
          2 3 信息系统 1.0 4
          3 4 操作系统 6.0 3
          4 5 数据结构 7.0 4
          5 6 数据处理 NaN 2
          6 7 PASCAL语言 6.0 4

          5、index_col:指定列为索引列,默认None列, index_col = 0——第一列为index值

          index_col int,int 列表,默认None

            data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',index_col=2)


            data
            Out[13]:
            cno cname ccredit
            cpno
            5.0 1 数据库 4
            NaN 2 数学 2
            1.0 3 信息系统 4
            6.0 4 操作系统 3
            7.0 5 数据结构 4
            NaN 6 数据处理 2
            6.0 7 PASCAL语言 4


            data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',index_col=[2,3,1])


            data
            Out[15]:
            cno
            cpno ccredit cname
            5 4 数据库 1
            2 数学 2
            1 4 信息系统 3
            6 3 操作系统 4
            7 4 数据结构 5
            2 数据处理 6
            6 4 PASCAL语言 7

            6、usecols:int, str, list-like, or callable default None,指定解析的列
            如果为None则解析所有列</br> 如果为int则表示要解析的最后一列</br> 如果为int列表则表示要解析的列号列表</br> 如果字符串则表示以逗号分隔的Excel列字母和列范围列表(例如“A:E”或“A,C,E:F”)。范围包括双方。

              data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',usecols=[1,2])
              data
              Out[18]:
              cname cpno
              0 数据库 5.0
              1 数学 NaN
              2 信息系统 1.0
              3 操作系统 6.0
              4 数据结构 7.0
              5 数据处理 NaN
              6 PASCAL语言 6.0

              7、skiprows:list-like, int, or callable, optional,省略指定行数的数据,从第一行开始

                data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',skiprows=[2,4])
                data
                Out[32]:
                cno cname cpno ccredit
                0 1 数据库 5.0 4
                1 3 信息系统 1.0 4
                2 5 数据结构 7.0 4
                3 6 数据处理 NaN 2
                4 7 PASCAL语言 6.0 4

                8、 nrows int,默认None。解析0-所指定的行数

                  data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',nrows=3)
                  data
                  Out[36]:
                  cno cname cpno ccredit
                  0 1 数据库 5.0 4
                  1 2 数学 NaN 2
                  2 3 信息系统 1.0 4

                  9、skipfooter:int, default 0。省略从尾部数的行数据,没有第0行,从1开始

                    data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',skipfooter=1)
                    data
                    Out[34]:
                    cno cname cpno ccredit
                    0 1 数据库 5.0 4
                    1 2 数学 NaN 2
                    2 3 信息系统 1.0 4
                    3 4 操作系统 6.0 3
                    4 5 数据结构 7.0 4
                    5 6 数据处理 NaN 2

                    10、dtype: 转换某些列的数据类型,字典:{col _ name: type _ name,...}

                      data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',dtype={'ccredit':float})
                      data
                      Out[38]:
                      cno cname cpno ccredit
                      0 1 数据库 5.0 4.0
                      1 2 数学 NaN 2.0
                      2 3 信息系统 1.0 4.0
                      3 4 操作系统 6.0 3.0
                      4 5 数据结构 7.0 4.0
                      5 6 数据处理 NaN 2.0
                      6 7 PASCAL语言 6.0 4.0

                      11、converters某些特定列的各种转换(包括日期,数据类型等),converters意思就是将某个函数应用到某列上

                      converters={'date': lambda x: pd.to_datetime(x, format='%Y%m')})

                      百分比:convertPercent

                        data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',converters={'ccredit':int})
                        data
                        Out[24]:
                        cno cname cpno ccredit
                        0 1 数据库 5.0 4
                        1 2 数学 NaN 2
                        2 3 信息系统 1.0 4
                        3 4 操作系统 6.0 3
                        4 5 数据结构 7.0 4
                        5 6 数据处理 NaN 2
                        6    7  PASCAL语言   6.0        4

                        12、keep_default_na bool,默认为 True。

                        keep_default_na :解析数据时是否包含默认 NaN 值。根据是否传入na_values,行为如下:

                        如果keep_default_na为True,并且na_values指定,na_values 被附加到NaN值用于解析所述默认值。

                        如果keep_default_na为 True,并且未指定na_values,则仅使用默认 NaN 值进行解析。

                        如果keep_default_na为 False,并且指定了na_values,则仅使用na_values指定的 NaN 值进行解析。

                        如果keep_default_na为 False,并且未指定na_values,则不会将任何字符串解析为 NaN。

                        请注意,如果na_filter作为 False 传入,则keep_default_na和 na_values参数将被忽略。
                        如果指定为 False,那么 pandas 在读取时就不会擅自将那些默认的值转成空值了,它们在 CSV 中长什么样,pandas 读取出来之后就还长什么样,即使单元格中啥也没有,那么得到的也是一个空字符串

                          data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',keep_default_na=False)
                          data
                          Out[42]:
                          cno cname cpno ccredit
                          0 1 数据库 5 4
                          1 2 数学 2
                          2 3 信息系统 1 4
                          3 4 操作系统 6 3
                          4 5 数据结构 7 4
                          5 6 数据处理 2
                          6 7 PASCAL语言 6 4

                          13、na_values参数处理na数据

                          如空值是-,通过na_values='--'转换成NaN

                          14、true_values和false_value,列表,默认None

                          指定哪些值应该被清洗为True,哪些值被清洗为False

                          注意这里的替换规则,只有当某一列的数据全部出现在true_values + false_values里面,才会被替换。

                          原因就是只有一个字段中所有的值都在true_values + false_values中,它们才会被替换

                            data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',true_values=['对'],false_values=['错'])
                            data
                            Out[62]:
                            cno cname cpno ccredit result
                            0 1 数据库 5.0 4 True
                            1 2 数学 NaN 2 False
                            2 3 信息系统 1.0 4 True
                            3 4 操作系统 6.0 3 False
                            4 5 数据结构 7.0 4 True
                            5 6 数据处理 NaN 2 False
                            6 7 PASCAL语言 6.0 4 False


                            data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',true_values=['对','错'])
                            data
                            Out[64]:
                            cno cname cpno ccredit result
                            0 1 数据库 5.0 4 True
                            1 2 数学 NaN 2 True
                            2 3 信息系统 1.0 4 True
                            3 4 操作系统 6.0 3 True
                            4 5 数据结构 7.0 4 True
                            5 6 数据处理 NaN 2 True
                            6 7 PASCAL语言 6.0 4 True

                            15、na_filter是否进行空值检测,默认为 True,如果指定为 False,那么 pandas 在读取 CSV 的时候不会进行任何空值的判断和检测,所有的值都会保留原样,提升文件运行速度

                            16、parse_dates:布尔值:值为True,解析index列

                            列表:列名或者列数--['col_name','col_name',..] or ['col_num1, col_num2,...] ,同时将多列字符串格式转换成日期格式

                            列表:列表的列表 ---[['col_name','col_name2']] or [['col_num','col_num2']],将列表中的多列,合并一个日期格式

                            字典:{'str': ['col_name','col_name2',..]} 为新合并的日期列指定一个新的列名'col_name'

                            parse_dates指定某些列为时间类型,这个参数一般搭配下面的date_parser使用。

                            date_parser是用来配合parse_dates参数的,因为有的列虽然是日期,但没办法直接转化,需要我们指定一个解析格式:

                              parse_dates=["date"], date_parser=lambda x: datetime.strptime(x, "%Y年%m月%d日")

                              小结:



                              03


                              CSV读取:pandas.read_csv


                              读取:pandas.read_csv(filepath_or_buffer, sep=NoDefault.no_default, delimiter=None, header='infer', names=NoDefault.no_default, index_col=None, usecols=None, squeeze=False, prefix=NoDefault.no_default, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors='strict', dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options=None)
                              分隔符参数:sep,delimiter,delim_whitespace
                              分块读取:iterator,chunksize

                              空值处理+:skip_blank_lines

                              列+:prefix
                              通用格式+:compression

                              其它参数同excl读取参数


                              1、filepath_or_buffer:路径文件名
                              2、sep

                              读取csv文件时指定的分隔符,默认为逗号。注意:"csv文件的分隔符" 和 "我们读取csv文件时指定的分隔符" 一定要一致。
                              3、delimiter

                              分隔符的另一个名字,与 sep 功能相似
                              4、delim_whitespace

                              0.18 版本后新加参数,默认为 False,设置为 True 时,表示分割符为空白字符,可以是空格、"\t"等等。不管分隔符是什么,只要是空白字符,那么可以通过delim_whitespace=True进行读取。
                              5、prefix,给列名增加前缀的
                              6、skip_blank_lines 默认为 True,表示过滤掉空行,如为 False 则解析为 NaN
                              7、分块读入内存,尤其单机处理大文件时会很有用。

                              iterator 为 bool类型,默认为False。如果为True,那么返回一个 TextFileReader 对象,以便逐块处理文件。这个在文件很大、内存无法容纳所有数据文件时,可以分批读入,依次处理。
                              8、chunksize 整型,默认为 None,设置文件块的大小。
                              9、compression 参数取值为 {'infer', 'gzip', 'bz2', 'zip', 'xz', None},默认 'infer',这个参数直接支持我们使用磁盘上的压缩文件。直接将csv打包成zip文件



                              04



                              EXCEL写入:变量.to_excel


                              写入:变量.to_excel(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, storage_options=None)

                              1、excel_writer:文件路径

                                xlsx.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx')

                                   原课程表                                                         导出后的课程表1

                                                          

                                大家留意一下差别,导出的excel会增加索引。

                                2、sheet_name str,默认'Sheet1'

                                将包含 DataFrame 的工作表的名称。

                                3、na_rep str,默认 '',缺少数据表示。

                                  data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',na_rep='空值')


                                  4、float_format str,可选

                                  浮点数的格式字符串。例如 float_format="%.2f"将 0.1234 格式化为 0.12。
                                  5、columns:序列或 str 列表,可选,要写入的列。

                                    data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',columns=['cno','cname'])

                                    6、header bool 或 str 列表,默认为 True

                                    写出列名。如果给出字符串列表,则假定它是列名的别名。

                                      data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',header=['花','儿','都','开','了'])

                                      7、index:布尔值,默认为 True,写行名称(索引),去索引

                                        data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',index=False)

                                        8、index_label str 或序列,可选

                                        如果需要,索引列的列标签。如果未指定,并且 标头和索引为 True,则使用索引名称。如果 DataFrame 使用 MultiIndex,则应给出序列。

                                          data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',index_label=['花'])

                                          9、startrow int,默认为 0。左上角单元格行转储数据帧。

                                          startcol int,默认为 0。左上角单元格列转储数据帧。

                                          表格定位

                                            data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',startrow=3)


                                            10、freeze_panes:int 元组(行,列),可选,冻结行列

                                              data.to_excel(r'C:\Users\Rhonin\Desktop\课程表1.xlsx',freeze_panes=(1,2))




                                              05



                                              CSV写入:变量.to_csv


                                              写入:变量.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict', storage_options=None)

                                              1、sep str,默认','分隔符


                                              06


                                              SQL读写:pandas.read_sql/变量.to_sql




                                              07


                                              SPSS读取:pandas.read_spss




                                              文章转载自Rhonin晴朗台风天,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                              评论