DataFrames常见方法(二)

未匹配的标注
  • IO操作

    • 导入:

      • pd.read_csv,读取csv格式文件

        • 参数解读

          • filepath_or_buffer 可以传入文件路径、URL和文件对象

            >>> import pandas as pd
            >>> pd.read_csv('test.csv') # 直接传入文件路径
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> with open('test.csv', encoding='utf-8') as f: # 通过with open 生成文件对象读取
            ...     df = pd.read_csv(f)
            ...     print(df)
            ...
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • sep 分隔符,默认为‘,’,可以传入正则表达式

            >>> pd.read_csv('test.csv',sep=',') # 默认情况下为,
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',sep=' ') # 将分隔符改为空格后读出变为一行
                             a,b,c,d,e
            0  0,a,2019/03/27,09:30,请问
            1   1,b,2019/03/26,10:00,2  2,c,2019/03/25,10:30,同意
            3  3,d,2019/03/24,11:00,UI
            4  4,e,2019/03/23,11:30,欧赔
            5    5,f,2019/03/22,13:00,
            6  6,g,2019/03/21,13:30,东方
            7  7,h,2019/03/20,14:00,更换
            8   8,,2019/03/19,14:30,接口
            9  9,j,2019/03/18,15:00,执行
            >>> df['a,b,c,d,e']
            0    0,a,2019/03/27,09:30,请问
            1     1,b,2019/03/26,10:00,2    2,c,2019/03/25,10:30,同意
            3    3,d,2019/03/24,11:00,UI
            4    4,e,2019/03/23,11:30,欧赔
            5      5,f,2019/03/22,13:00,
            6    6,g,2019/03/21,13:30,东方
            7    7,h,2019/03/20,14:00,更换
            8     8,,2019/03/19,14:30,接口
            9    9,j,2019/03/18,15:00,执行
            Name: a,b,c,d,e, dtype: object
          • header 选择开始读取位置,默认为infer,即从第一行开始读取,则第一行为列索引。可以穿int和int列表,当传入int列表的时表头会显示传入的行,第一个标记的行为列索引,其他行在下面显示,当和skip_blank_lines=True一起使用的时候可以跳过注释和空行

            >>> pd.read_csv('test.csv',header='infer')
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> pd.read_csv('test.csv',header=1)
               0    a  2019/03/27  09:30   请问
            0  1    b  2019/03/26  10:001  2    c  2019/03/25  10:30   同意
            2  3    d  2019/03/24  11:00   UI
            3  4    e  2019/03/23  11:30   欧赔
            4  5    f  2019/03/22  13:00  NaN
            5  6    g  2019/03/21  13:30   东方
            6  7    h  2019/03/20  14:00   更换
            7  8  NaN  2019/03/19  14:30   接口
            8  9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',header=[5,3])
            >>> df
               4    e  2019/03/23  11:30   欧赔
               2    c  2019/03/25  10:30   同意
            0  3    d  2019/03/24  11:00   UI
            1  4    e  2019/03/23  11:30   欧赔
            2  5    f  2019/03/22  13:00  NaN
            3  6    g  2019/03/21  13:30   东方
            4  7    h  2019/03/20  14:00   更换
            5  8  NaN  2019/03/19  14:30   接口
            6  9    j  2019/03/18  15:00   执行
            >>> df['e']
                 c
            0    d
            1    e
            2    f
            3    g
            4    h
            5  NaN
            6    j
          • skip_blank_lines 表示是否跳过注释和空行,传入bool类型即可,默认为True

            >>> pd.read_csv('test.csv',skip_blank_lines=True)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • name 生成新的列索引,传入列表,传入后原来的列索引会被覆盖,如果文件不包含标题行,则应显式传递header=None。此列表中的重复将导致发出用户警告。可以传入类数组

            >>> pd.read_csv('test.csv')['a'] # a这一列原本是int64类型
            0    0
            1    1
            2    2
            3    3
            4    4
            5    5
            6    6
            7    7
            8    8
            9    9
            Name: a, dtype: int64
            >>> df = pd.read_csv('test.csv',names=['Java','Python','C++','JavaScript']) # 在我们重新设置列索引这一行后由于数量没对上,a这一列变成了行索引,数据类型变成了字符串
            >>> df
              Java      Python    C++ JavaScript
            a    b           c      d          e
            0    a  2019/03/27  09:30         请问
            1    b  2019/03/26  10:002    c  2019/03/25  10:30         同意
            3    d  2019/03/24  11:00         UI
            4    e  2019/03/23  11:30         欧赔
            5    f  2019/03/22  13:00        NaN
            6    g  2019/03/21  13:30         东方
            7    h  2019/03/20  14:00         更换
            8  NaN  2019/03/19  14:30         接口
            9    j  2019/03/18  15:00         执行
            >>> df['Java']
            a      b
            0      a
            1      b
            2      c
            3      d
            4      e
            5      f
            6      g
            7      h
            8    NaN
            9      j
            Name: Java, dtype: object
            >>> df.loc['9','Python'] # 这里通过位置可以把某一个元素取出来
            '2019/03/18'
            # 因为a这一列与原先索引重复,可能没有说服力,我将文件中a这一列删除再次重新设置索引
            >>> pd.read_csv('test.csv')
                 b           c      d    e
            0    a  2019/03/27  09:30   请问
            1    b  2019/03/26  10:002    c  2019/03/25  10:30   同意
            3    d  2019/03/24  11:00   UI
            4    e  2019/03/23  11:30   欧赔
            5    f  2019/03/22  13:00  NaN
            6    g  2019/03/21  13:30   东方
            7    h  2019/03/20  14:00   更换
            8  NaN  2019/03/19  14:30   接口
            9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',names=['Java','Python','C++'])
            >>> df
                       Java Python  C++
            b             c      d    e
            a    2019/03/27  09:30   请问
            b    2019/03/26  10:00    二
            c    2019/03/25  10:30   同意
            d    2019/03/24  11:00   UI
            e    2019/03/23  11:30   欧赔
            f    2019/03/22  13:00  NaN
            g    2019/03/21  13:30   东方
            h    2019/03/20  14:00   更换
            NaN  2019/03/19  14:30   接口
            j    2019/03/18  15:00   执行
            >>> df.loc['a','Java']
            '2019/03/27' # 从这里我们可以看出,在DataFrame中,第一列应该一直是行索引
            >>> df = pd.read_csv('test.csv',names=['Java','Python','C++','JavaScript','Php','Sql']) # 当给的列索引比原来的列多时,会新生产一个全为空值得列,这里显示为NaN
               Java Python         C++ JavaScript  Php  Sql
            0     a      b           c          d    e  NaN
            1     0      a  2019/03/27      09:30   请问  NaN
            2     1      b  2019/03/26      10:00    二  NaN
            3     2      c  2019/03/25      10:30   同意  NaN
            4     3      d  2019/03/24      11:00   UI  NaN
            5     4      e  2019/03/23      11:30   欧赔  NaN
            6     5      f  2019/03/22      13:00  NaN  NaN
            7     6      g  2019/03/21      13:30   东方  NaN
            8     7      h  2019/03/20      14:00   更换  NaN
            9     8    NaN  2019/03/19      14:30   接口  NaN
            10    9      j  2019/03/18      15:00   执行  NaN
            >>> df = pd.read_csv('test.csv',names=['Java','Python','C++','JavaScript','Python']) # 当出现重复的时候会出现警告,并将名字改为x:x.1 
            x:xxx: UserWarning: Duplicate names specified. This will raise an error
            in the future.
              return _read(filepath_or_buffer, kwds)
            >>> df
               Java Python         C++ JavaScript Python.1
            0     a      b           c          d        e
            1     0      a  2019/03/27      09:30       请问
            2     1      b  2019/03/26      10:003     2      c  2019/03/25      10:30       同意
            4     3      d  2019/03/24      11:00       UI
            5     4      e  2019/03/23      11:30       欧赔
            6     5      f  2019/03/22      13:00      NaN
            7     6      g  2019/03/21      13:30       东方
            8     7      h  2019/03/20      14:00       更换
            9     8    NaN  2019/03/19      14:30       接口
            10    9      j  2019/03/18      15:00       执行
          • index_col 将某一列或者多列变成行索引列,可传入int,对应位置的列作为索引列,在传入多个的时候,第一列为索引列,在获取元素的时候会出现警告

            >>> df = pd.read_csv('test.csv',index_col=1)
            >>> df
                 a           c      d    e
            b
            a    0  2019/03/27  09:30   请问
            b    1  2019/03/26  10:00    二
            c    2  2019/03/25  10:30   同意
            d    3  2019/03/24  11:00   UI
            e    4  2019/03/23  11:30   欧赔
            f    5  2019/03/22  13:00  NaN
            g    6  2019/03/21  13:30   东方
            h    7  2019/03/20  14:00   更换
            NaN  8  2019/03/19  14:30   接口
            j    9  2019/03/18  15:00   执行
            >>> df.loc['a','a']
            0
            >>> df = pd.read_csv('test.csv',index_col=[1,3,4])
            >>> df
                           a           c
            b   d     e
            a   09:30 请问   0  2019/03/27
            b   10:001  2019/03/26
            c   10:30 同意   2  2019/03/25
            d   11:00 UI   3  2019/03/24
            e   11:30 欧赔   4  2019/03/23
            f   13:00 NaN  5  2019/03/22
            g   13:30 东方   6  2019/03/21
            h   14:00 更换   7  2019/03/20
            NaN 14:30 接口   8  2019/03/19
            j   15:00 执行   9  2019/03/18
            >>> df.loc['a','a'] 
            __main__:1: PerformanceWarning: indexing past lexsort depth may impact performance.
            d      e
            09:30  请问    0
            Name: a, dtype: int64
            >>> df.loc['09:30','a']
          • usecols 选择读取的列,可传入数字列表或者列名列表,不能混合传。读取结果为传入列表中的列

            >>> pd.read_csv('test.csv',usecols=[1,3])
                 b      d
            0    a  09:30
            1    b  10:00
            2    c  10:30
            3    d  11:00
            4    e  11:30
            5    f  13:00
            6    g  13:30
            7    h  14:00
            8  NaN  14:30
            9    j  15:00
            >>> pd.read_csv('test.csv',usecols=['a','c'])
               a           c
            0  0  2019/03/27
            1  1  2019/03/26
            2  2  2019/03/25
            3  3  2019/03/24
            4  4  2019/03/23
            5  5  2019/03/22
            6  6  2019/03/21
            7  7  2019/03/20
            8  8  2019/03/19
            9  9  2019/03/18
          • squeeze 当获取数据只有一列时将它转换为Series,默认为Fales

            >>> df = pd.read_csv('test.csv',usecols=['a'])
            >>> df
               a
            0  0
            1  1
            2  2
            3  3
            4  4
            5  5
            6  6
            7  7
            8  8
            9  9
            >>> type(df)
            <class 'pandas.core.frame.DataFrame'>
            >>> df = pd.read_csv('test.csv',usecols=['a'],squeeze=True)
            >>> df
            0    0
            1    1
            2    2
            3    3
            4    4
            5    5
            6    6
            7    7
            8    8
            9    9
            Name: a, dtype: int64
            >>> type(df)
            <class 'pandas.core.series.Series'>
          • prefix 当读取的csv文件没有列索引行时,可以为其添加列名

            >>> df = pd.read_csv('test.csv',prefix='g',header=None)
            >>> df
               g0   g1          g2     g3   g4
            0   a    b           c      d    e
            1   0    a  2019/03/27  09:30   请问
            2   1    b  2019/03/26  10:003   2    c  2019/03/25  10:30   同意
            4   3    d  2019/03/24  11:00   UI
            5   4    e  2019/03/23  11:30   欧赔
            6   5    f  2019/03/22  13:00  NaN
            7   6    g  2019/03/21  13:30   东方
            8   7    h  2019/03/20  14:00   更换
            9   8  NaN  2019/03/19  14:30   接口
            10  9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',prefix=['a','b','c','d','g'],header=None) # 这是个待优化的地方,不能传多个值,他会将多个值变成一个值
            >>> df
               ['a', 'b', 'c', 'd', 'g']0 ['a', 'b', 'c', 'd', 'g']1 ['a', 'b', 'c', 'd', 'g']2 ['a', 'b', 'c', 'd', 'g']3 ['a', 'b', 'c', 'd', 'g']4
            0                           a                          b                          c                          d                          e
            1                           0                          a                 2019/03/27                      09:30                         请问
            2                           1                          b                 2019/03/26                      10:003                           2                          c                 2019/03/25                      10:30                         同意
            4                           3                          d                 2019/03/24                      11:00                         UI
            5                           4                          e                 2019/03/23                      11:30                         欧赔
            6                           5                          f                 2019/03/22                      13:00                        NaN
            7                           6                          g                 2019/03/21                      13:30                         东方
            8                           7                          h                 2019/03/20                      14:00                         更换
            9                           8                        NaN                 2019/03/19                      14:30                         接口
            10                          9                          j                 2019/03/18                      15:00                         执行
          • mangle_dupe_cols 将重复列重命名,demo:’x’ ,’x.1’,默认为True

            >>> df = pd.read_csv('test.csv',mangle_dupe_cols=False)
            ValueError: Setting mangle_dupe_cols=False is not supported yet # 还不支持将它设置为False = =这个目前可以忽略了,考虑到索引重名会影响选择数据等问题,我觉得目前不支持也很正常
          • dtype 设置列的数据类型,传入字典,键为列名,值为列的类型

            >>> import numpy as np
            >>> pd.read_csv('test.csv')['a']
            0    0
            1    1
            2    2
            3    3
            4    4
            5    5
            6    6
            7    7
            8    8
            9    9
            Name: a, dtype: int64
            >>> pd = pd.read_csv('test.csv',dtype={'a':np.float64})
                 a    b           c      d    e
            0  0.0    a  2019/03/27  09:30   请问
            1  1.0    b  2019/03/26  10:002  2.0    c  2019/03/25  10:30   同意
            3  3.0    d  2019/03/24  11:00   UI
            4  4.0    e  2019/03/23  11:30   欧赔
            5  5.0    f  2019/03/22  13:00  NaN
            6  6.0    g  2019/03/21  13:30   东方
            7  7.0    h  2019/03/20  14:00   更换
            8  8.0  NaN  2019/03/19  14:30   接口
            9  9.0    j  2019/03/18  15:00   执行
            >>> pd['a']
            0    0.0
            1    1.0
            2    2.0
            3    3.0
            4    4.0
            5    5.0
            6    6.0
            7    7.0
            8    8.0
            9    9.0
            Name: a, dtype: float64
          • engine 选择解释器引擎,可以选’c’、’python’,C解释器速度更快,Python解释器功能更多

            >>> pd.read_csv('test.csv',engine='c') 
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> pd.read_csv('test.csv',engine='python') # 直接用python引擎读会乱码因为python3 中的字符串默认为 Unicode 编码,这说明默认的解释器引擎应该是C
               a    b           c      d     e
            0  0    a  2019/03/27  09:30   璇烽棶
            1  1    b  2019/03/26  10:00    浜�
            2  2    c  2019/03/25  10:30   鍚屾剰
            3  3    d  2019/03/24  11:00    UI
            4  4    e  2019/03/23  11:30   娆ц禂
            5  5    f  2019/03/22  13:00   NaN
            6  6    g  2019/03/21  13:30   涓滄柟
            7  7    h  2019/03/20  14:00   鏇存崲
            8  8  NaN  2019/03/19  14:30   鎺ュ彛
            9  9    j  2019/03/18  15:00  鎵ц��
            >>> pd.read_csv('test.csv',engine='python',encoding='utf-8') # 加上编码格式 后成功读出中文
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • converters
            就跟他的名字一样,他可以把数据转换为另一种数据,不仅限于数据类型,他还可以改变数据,需传入字典,键为列名或者列所在的位置,值传函数名

            >>> def fun(x):
            ...     x = int(x)+1
            ...     return x
            ...
            >>> pd.read_csv('test.csv',converters = {'a':fun})
                a    b           c      d    e
            0   1    a  2019/03/27  09:30   请问
            1   2    b  2019/03/26  10:002   3    c  2019/03/25  10:30   同意
            3   4    d  2019/03/24  11:00   UI
            4   5    e  2019/03/23  11:30   欧赔
            5   6    f  2019/03/22  13:00  NaN
            6   7    g  2019/03/21  13:30   东方
            7   8    h  2019/03/20  14:00   更换
            8   9  NaN  2019/03/19  14:30   接口
            9  10    j  2019/03/18  15:00   执行
          • true_values 将一列的值认为是True

            >>> pd.read_csv('test.csv',true_values=['a'])
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',true_values=['a']) # 我目前还没发现这个有啥用,如果有大佬知道,求告诉我一下
            >>> df['a']
            0    0
            1    1
            2    2
            3    3
            4    4
            5    5
            6    6
            7    7
            8    8
            9    9
            Name: a, dtype: int64
          • false_values 将一列的值认为是False

            >>> df = pd.read_csv('test.csv',false_values=['a'])
            >>> df['a']
            0    0
            1    1
            2    2
            3    3
            4    4
            5    5
            6    6
            7    7
            8    8
            9    9
            Name: a, dtype: int64
          • skiprows 从顶部开始跳过,然后开始列索引也随之改变,可以传int,和任何可迭代的数据,当传迭代的数据时,在没有0的情况下列索引不会被改变,有0的情况下会将下一个跳过的行作为列索引,如果连续,则为最后一个连续的行作为索引行

            >>> df = pd.read_csv('test.csv',skiprows=5) # 只传入一个,所以直接将行索引为5作为索银行开始读取
            >>> df
               4    e  2019/03/23  11:30   欧赔
            0  5    f  2019/03/22  13:00  NaN
            1  6    g  2019/03/21  13:30   东方
            2  7    h  2019/03/20  14:00   更换
            3  8  NaN  2019/03/19  14:30   接口
            4  9    j  2019/03/18  15:00   执行
            >>> df.loc[0,'e']
            'f'
            >>> df = pd.read_csv('test.csv',skiprows=[1,3,4]) # 这里传入多个后,由于没有从第一行开始,所以原来的列索引没有改变
            >>> df
               a    b           c      d    e
            0  1    b  2019/03/26  10:001  4    e  2019/03/23  11:30   欧赔
            2  5    f  2019/03/22  13:00  NaN
            3  6    g  2019/03/21  13:30   东方
            4  7    h  2019/03/20  14:00   更换
            5  8  NaN  2019/03/19  14:30   接口
            6  9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',skiprows=[0,2,3,4]) # 从第一行开始跳过而且不连续所以列索引就为第一行
            >>> df
               0    a  2019/03/27  09:30   请问
            0  4    e  2019/03/23  11:30   欧赔
            1  5    f  2019/03/22  13:00  NaN
            2  6    g  2019/03/21  13:30   东方
            3  7    h  2019/03/20  14:00   更换
            4  8  NaN  2019/03/19  14:30   接口
            5  9    j  2019/03/18  15:00   执行
            >>> df = pd.read_csv('test.csv',skiprows=[0,1,2,3,4]) # 从第一行开始且传入连续的,所以会直接跳过前面所有的直接从索引为4的位置开始,即将原来索引为4的行作为列索引
            >>> df
               4    e  2019/03/23  11:30   欧赔
            0  5    f  2019/03/22  13:00  NaN
            1  6    g  2019/03/21  13:30   东方
            2  7    h  2019/03/20  14:00   更换
            3  8  NaN  2019/03/19  14:30   接口
            4  9    j  2019/03/18  15:00   执行
          • skipfooter 从底部开始跳过,不支持C引擎,默认为0,只能传入单个int

            >>> df = pd.read_csv('test.csv',skipfooter=1) # 不指定Python引擎就会出警告
            __main__:1: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support ski
            pfooter; you can avoid this warning by specifying engine='python'.
            >>> df = pd.read_csv('test.csv',skipfooter=1,engine='python',encoding='utf-8') # 
            >>> df
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            >>> df = pd.read_csv('test.csv',skipfooter=5,engine='python',encoding='utf-8') # 这个不支持迭代器,只能传单个数字
            >>> df
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
          • nrows 读取指定行数,读取顺序为从顶部到底部,必须为int

            >>> pd.read_csv('test.csv',nrows=5)
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
          • na_values 可以将制定值变为缺失值NaN,将多个值放入可迭代对象也可以将多个值都转化为NaN,不想看到它,就把它放进去吧,哈哈

            >>> pd.read_csv('test.csv',na_values=[0,1,2])
                 a    b           c      d    e
            0  NaN    a  2019/03/27  09:30   请问
            1  NaN    b  2019/03/26  10:002  NaN    c  2019/03/25  10:30   同意
            3  3.0    d  2019/03/24  11:00   UI
            4  4.0    e  2019/03/23  11:30   欧赔
            5  5.0    f  2019/03/22  13:00  NaN
            6  6.0    g  2019/03/21  13:30   东方
            7  7.0    h  2019/03/20  14:00   更换
            8  8.0  NaN  2019/03/19  14:30   接口
            9  9.0    j  2019/03/18  15:00   执行
          • keep_default_na 是否保留默认应该转化为缺失值的列表,默认为True,如果你想显示文档的所有内容可以将其改为False并且不传入任何na_values

            >>> pd.read_csv('test.csv',keep_default_na=False)
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8     2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
          • na_filter 是否不过滤掉所有NA,默认为True

            >>> pd.read_csv('test.csv',na_filter=False) 
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8     2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_csv('test.csv',na_filter=False,na_values=[0,1,2]) # 从这里可以看出,na_values的优先级比na_filter高
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8     2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
          • verbose 显示标注NA的一些参数
            Tokenization took: 0.00 ms
            Type conversion took: 0.00 ms
            Parser memory cleanup took: 0.00 ms

            >>> pd.read_csv('test.csv',verbose=True)
            Tokenization took: 0.00 ms
            Type conversion took: 0.00 ms
            Parser memory cleanup took: 0.00 ms
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • skip_blank_lines 是否跳过空白行,默认为True

            >>> pd.read_csv('test.csv',skip_blank_lines=True,keep_default_na=False,na_filter=False) # 这里可以看出skip_blank_lines的优先级比keep_default_na和na_filter的优先级都高
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8     2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
          • parse_dates 解析数据为时间格式。
            传入boolean格式时,会尝试解析索引;
            传入int or column name or list 时,解析指定列;(实际测试中出现这个错误TypeError: Only booleans, lists, and dictionaries are accepted for the ‘parse_dates’ parameter,说明目前版本还不支持int and column name)
            传入[[]]时会将列表里的解析为一个时间格式;
            传入dict时会将字典值里的两列合并为时间格式赋值给键

            >>> pd.read_csv('test.csv',parse_dates=True)['c']
            0    2019/03/27
            1    2019/03/26
            2    2019/03/25
            3    2019/03/24
            4    2019/03/23
            5    2019/03/22
            6    2019/03/21
            7    2019/03/20
            8    2019/03/19
            9    2019/03/18
            Name: c, dtype: object
            >>> pd.read_csv('test.csv',parse_dates=True)['d']
            0    09:30
            1    10:00
            2    10:30
            3    11:00
            4    11:30
            5    13:00
            6    13:30
            7    14:00
            8    14:30
            9    15:00
            Name: d, dtype: object
            >>> pd.read_csv('test.csv',parse_dates=[2])['c']
            0   2019-03-27
            1   2019-03-26
            2   2019-03-25
            3   2019-03-24
            4   2019-03-23
            5   2019-03-22
            6   2019-03-21
            7   2019-03-20
            8   2019-03-19
            9   2019-03-18
            Name: c, dtype: datetime64[ns]
            >>> pd.read_csv('test.csv',parse_dates=[3])['d'] # 当数据时分时时会在前面加入了当前的日期
            0   2019-03-27 09:30:00
            1   2019-03-27 10:00:00
            2   2019-03-27 10:30:00
            3   2019-03-27 11:00:00
            4   2019-03-27 11:30:00
            5   2019-03-27 13:00:00
            6   2019-03-27 13:30:00
            7   2019-03-27 14:00:00
            8   2019-03-27 14:30:00
            9   2019-03-27 15:00:00
            Name: d, dtype: datetime64[ns]
            >>> pd.read_csv('test.csv',parse_dates=[2])['c'] # 当数据时日期是会将他的类型改变
            0   2019-03-27
            1   2019-03-26
            2   2019-03-25
            3   2019-03-24
            4   2019-03-23
            5   2019-03-22
            6   2019-03-21
            7   2019-03-20
            8   2019-03-19
            9   2019-03-18
            Name: c, dtype: datetime64[ns]
            >>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]})
              时间  a    b    e
            0 2019-03-27 09:30:00  0    a   请问
            1 2019-03-26 10:00:00  1    b    二
            2 2019-03-25 10:30:00  2    c   同意
            3 2019-03-24 11:00:00  3    d   UI
            4 2019-03-23 11:30:00  4    e   欧赔
            5 2019-03-22 13:00:00  5    f  NaN
            6 2019-03-21 13:30:00  6    g   东方
            7 2019-03-20 14:00:00  7    h   更换
            8 2019-03-19 14:30:00  8  NaN   接口
            9 2019-03-18 15:00:00  9    j   执行
            >>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]})['时间']
            0   2019-03-27 09:30:00
            1   2019-03-26 10:00:00
            2   2019-03-25 10:30:00
            3   2019-03-24 11:00:00
            4   2019-03-23 11:30:00
            5   2019-03-22 13:00:00
            6   2019-03-21 13:30:00
            7   2019-03-20 14:00:00
            8   2019-03-19 14:30:00
            9   2019-03-18 15:00:00
            Name: 时间, dtype: datetime64[ns]
          • infer_datetime_format 开启datetime解析,如果和parse_dates同时开启速度回快5-10倍,默认为Fasle

            >>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]},infer_datetime_format=True) # 没感觉快多少啊,可能数据量比较小,看不出来
               时间  a    b    e
            0 2019-03-27 09:30:00  0    a   请问
            1 2019-03-26 10:00:00  1    b    二
            2 2019-03-25 10:30:00  2    c   同意
            3 2019-03-24 11:00:00  3    d   UI
            4 2019-03-23 11:30:00  4    e   欧赔
            5 2019-03-22 13:00:00  5    f  NaN
            6 2019-03-21 13:30:00  6    g   东方
            7 2019-03-20 14:00:00  7    h   更换
            8 2019-03-19 14:30:00  8  NaN   接口
            9 2019-03-18 15:00:00  9    j   执行
          • keep_date_col 在parse_dates传入字典时可以保存原始列

            >>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]},keep_date_col=True)
               时间  a    b           c      d    e
            0 2019-03-27 09:30:00  0    a  2019/03/27  09:30   请问
            1 2019-03-26 10:00:00  1    b  2019/03/26  10:002 2019-03-25 10:30:00  2    c  2019/03/25  10:30   同意
            3 2019-03-24 11:00:00  3    d  2019/03/24  11:00   UI
            4 2019-03-23 11:30:00  4    e  2019/03/23  11:30   欧赔
            5 2019-03-22 13:00:00  5    f  2019/03/22  13:00  NaN
            6 2019-03-21 13:30:00  6    g  2019/03/21  13:30   东方
            7 2019-03-20 14:00:00  7    h  2019/03/20  14:00   更换
            8 2019-03-19 14:30:00  8  NaN  2019/03/19  14:30   接口
            9 2019-03-18 15:00:00  9    j  2019/03/18  15:00   执行
          • date_parser 通过特殊函数将字符串转化为datatime格式

            >>> def my_date_parser(dt):
            ...     return datetime(int(dt[0:4]), int(dt[5:7]), int(dt[8:10]))
            ...
            >>> pd.read_csv('test.csv',date_parser=my_date_parser,parse_dates={'time':[2]})
                    time  a    b      d    e
            0 2019-03-27  0    a  09:30   请问
            1 2019-03-26  1    b  10:002 2019-03-25  2    c  10:30   同意
            3 2019-03-24  3    d  11:00   UI
            4 2019-03-23  4    e  11:30   欧赔
            5 2019-03-22  5    f  13:00  NaN
            6 2019-03-21  6    g  13:30   东方
            7 2019-03-20  7    h  14:00   更换
            8 2019-03-19  8  NaN  14:30   接口
            9 2019-03-18  9    j  15:00   执行
            >>> pd.read_csv('test.csv',date_parser=my_date_parser,parse_dates={'time':[2]})['time']
            0   2019-03-27
            1   2019-03-26
            2   2019-03-25
            3   2019-03-24
            4   2019-03-23
            5   2019-03-22
            6   2019-03-21
            7   2019-03-20
            8   2019-03-19
            9   2019-03-18
            Name: time, dtype: datetime64[ns]
          • dayfirst 是否开启日期解析 默认为否

            >>> pd.read_csv('test.csv',dayfirst=True)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> pd.read_csv('test.csv',dayfirst=True)['c']
            0    2019/03/27
            1    2019/03/26
            2    2019/03/25
            3    2019/03/24
            4    2019/03/23
            5    2019/03/22
            6    2019/03/21
            7    2019/03/20
            8    2019/03/19
            9    2019/03/18
            Name: c, dtype: object
            >>> pd.read_csv('test.csv',dayfirst=True)['d']
            0    09:30
            1    10:00
            2    10:30
            3    11:00
            4    11:30
            5    13:00
            6    13:30
            7    14:00
            8    14:30
            9    15:00
            Name: d, dtype: object
          • iterator 是否将结果转为可迭代对象,还可以通过get_chunk方法获取

            >>> pd.read_csv('test.csv',iterator=True)
            <pandas.io.parsers.TextFileReader object at 0x0000017A2836A518>
            >>> for i in pd.read_csv('test.csv',iterator=True):
            ...     print(i)
            ...
            <built-in function print>
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> pd.read_csv('test.csv',iterator=True).get_chunk()
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            
          • chunksize 将提供的行数变成可迭代对象,同样可以通过get_chunk方法获取

            >>> pd.read_csv('test.csv',chunksize=1)
            <pandas.io.parsers.TextFileReader object at 0x00000183F582A1D0>
            >>> for i in pd.read_csv('test.csv',chunksize=5): # 这里遍历的时候好像是将它切割开
            ...     print(i)
            ...
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
               a    b           c      d    e
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> for i in pd.read_csv('test.csv',chunksize=1):
            ...     print(i)
            ...
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
               a  b           c      d  e
            1  1  b  2019/03/26  10:00  二
               a  b           c      d   e
            2  2  c  2019/03/25  10:30  同意
               a  b           c      d   e
            3  3  d  2019/03/24  11:00  UI
               a  b           c      d   e
            4  4  e  2019/03/23  11:30  欧赔
               a  b           c      d   e
            5  5  f  2019/03/22  13:00 NaN
               a  b           c      d   e
            6  6  g  2019/03/21  13:30  东方
               a  b           c      d   e
            7  7  h  2019/03/20  14:00  更换
               a   b           c      d   e
            8  8 NaN  2019/03/19  14:30  接口
               a  b           c      d   e
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_csv('test.csv',chunksize=1).get_chunk()
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            >>> pd.read_csv('test.csv',chunksize=5).get_chunk()
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
          • compression 解压缩,可选{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, 默认‘infer’

            >>> pd.read_csv('test.zip',compression='zip')
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • thousands 千位分隔符

            >>> df = pd.read_csv('test.csv') # 因为它没有上千的数字
            >>> df['a']=df['a']*99999 # 于是我将a列全都×99999
            >>> df
                    a    b           c      d    e
            0       0    a  2019/03/27  09:30   请问
            1   99999    b  2019/03/26  10:002  199998    c  2019/03/25  10:30   同意
            3  299997    d  2019/03/24  11:00   UI
            4  399996    e  2019/03/23  11:30   欧赔
            5  499995    f  2019/03/22  13:00  NaN
            6  599994    g  2019/03/21  13:30   东方
            7  699993    h  2019/03/20  14:00   更换
            8  799992  NaN  2019/03/19  14:30   接口
            9  899991    j  2019/03/18  15:00   执行
            >>> df.to_csv('test2.csv') # 将结果存入test2
            >>> pd.read_csv('test2.csv') # 读出test2查看是否正确
               Unnamed: 0       a    b           c      d    e
            0           0       0    a  2019/03/27  09:30   请问
            1           1   99999    b  2019/03/26  10:002           2  199998    c  2019/03/25  10:30   同意
            3           3  299997    d  2019/03/24  11:00   UI
            4           4  399996    e  2019/03/23  11:30   欧赔
            5           5  499995    f  2019/03/22  13:00  NaN
            6           6  599994    g  2019/03/21  13:30   东方
            7           7  699993    h  2019/03/20  14:00   更换
            8           8  799992  NaN  2019/03/19  14:30   接口
            9           9  899991    j  2019/03/18  15:00   执行
            >>> pd.read_csv('test2.csv',thousands='/') # 但是一顿操作猛如虎,结果啥都没变
               Unnamed: 0       a    b         c      d    e
            0           0       0    a  20190327  09:30   请问
            1           1   99999    b  20190326  10:002           2  199998    c  20190325  10:30   同意
            3           3  299997    d  20190324  11:00   UI
            4           4  399996    e  20190323  11:30   欧赔
            5           5  499995    f  20190322  13:00  NaN
            6           6  599994    g  20190321  13:30   东方
            7           7  699993    h  20190320  14:00   更换
            8           8  799992  NaN  20190319  14:30   接口
            9           9  899991    j  20190318  15:00   执行
          • decimal 识别成小数点的字符,默认为‘.’注意,只能穿一个长度的str

            >>> pd.read_csv('test.csv',decimal=':')
               a    b           c     d    e
            0  0    a  2019/03/27   9.3   请问
            1  1    b  2019/03/26  10.02  2    c  2019/03/25  10.3   同意
            3  3    d  2019/03/24  11.0   UI
            4  4    e  2019/03/23  11.3   欧赔
            5  5    f  2019/03/22  13.0  NaN
            6  6    g  2019/03/21  13.3   东方
            7  7    h  2019/03/20  14.0   更换
            8  8  NaN  2019/03/19  14.3   接口
            9  9    j  2019/03/18  15.0   执行
          • lineterminator 行结束标识符,会根据传入的str结束行,只对C引擎有效

            >>> pd.read_csv('test.csv',lineterminator=',')
                         a
            0            b
            1            c
            2            d
            3       e\r\n0
            4            a
            5   2019/03/27
            6        09:30
            7      请问\r\n1
            8            b
            9   2019/03/26
            10       10:00
            11      二\r\n2
            12           c
            13  2019/03/25
            14       10:30
            15     同意\r\n3
            16           d
            17  2019/03/24
            18       11:00
            19     UI\r\n4
            20           e
            21  2019/03/23
            22       11:30
            23     欧赔\r\n5
            24           f
            25  2019/03/22
            26       13:00
            27       \r\n6
            28           g
            29  2019/03/21
            30       13:30
            31     东方\r\n7
            32           h
            33  2019/03/20
            34       14:00
            35     更换\r\n8
            36  2019/03/19
            37       14:30
            38     接口\r\n9
            39           j
            40  2019/03/18
            41       15:00
            42      执行\r\n
          • quotechar
            // TODO 引用分隔符

          • quoting
            // TODO 引用

          • doublequote
            // TODO 引用啥咧

          • escapechar 将一个长度为1的字符串变为转义字符

            >>> pd.read_csv('test.csv',escapechar='/')
               a    b         c      d    e
            0  0    a  20190327  09:30   请问
            1  1    b  20190326  10:002  2    c  20190325  10:30   同意
            3  3    d  20190324  11:00   UI
            4  4    e  20190323  11:30   欧赔
            5  5    f  20190322  13:00  NaN
            6  6    g  20190321  13:30   东方
            7  7    h  20190320  14:00   更换
            8  8  NaN  20190319  14:30   接口
            9  9    j  20190318  15:00   执行
          • comment
            //TODO 注释相关

          • encoding 编码方式

            >>> pd.read_csv('test.csv',engine='python')
               a    b           c      d     e
            0  0    a  2019/03/27  09:30   璇烽棶
            1  1    b  2019/03/26  10:00    浜�
            2  2    c  2019/03/25  10:30   鍚屾剰
            3  3    d  2019/03/24  11:00    UI
            4  4    e  2019/03/23  11:30   娆ц禂
            5  5    f  2019/03/22  13:00   NaN
            6  6    g  2019/03/21  13:30   涓滄柟
            7  7    h  2019/03/20  14:00   鏇存崲
            8  8  NaN  2019/03/19  14:30   鎺ュ彛
            9  9    j  2019/03/18  15:00  鎵ц��
            >>> pd.read_csv('test.csv',engine='python',encoding='utf-8')
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • tupleize_cols

            >>> pd.read_csv('test.csv',tupleize_cols=True)
            xxx:885: FutureWarning: The'tupleize_cols' argument has been deprecated and will be removed in a future version. Column tuples will t
            hen always be converted to MultiIndex.
            self.options, self.engine = self._clean_options(options, engine)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • error_bad_lines 将问题行删除,默认为True

            >>> pd.read_csv('test.csv',error_bad_lines=False)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • warn_bad_lines 显示问题行的警告,默认为True

            >>> pd.read_csv('test.csv',warn_bad_lines=False)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • delim_whitespace 将换行符换成空格,等效于sep=’\s+’,默认为False

            >>> pd.read_csv('test.csv',delim_whitespace =True)
             a,b,c,d,e
            0  0,a,2019/03/27,09:30,请问
            1   1,b,2019/03/26,10:00,2  2,c,2019/03/25,10:30,同意
            3  3,d,2019/03/24,11:00,UI
            4  4,e,2019/03/23,11:30,欧赔
            5    5,f,2019/03/22,13:00,
            6  6,g,2019/03/21,13:30,东方
            7  7,h,2019/03/20,14:00,更换
            8   8,,2019/03/19,14:30,接口
            9  9,j,2019/03/18,15:00,执行
          • low_memory 减少对df数据类型的选择,降低消耗内存,大白话就是为了减少内存消耗放弃一些数据类型的精度

            >>> pd.read_csv('test.csv',low_memory =False)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • memory_map 将文件加载到内存中,提高读取效率

            >>> pd.read_csv('test.csv',memory_map =True)
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
          • float_precision 在C引擎在,可以优化浮点数

            >>> pd.read_csv('test.csv',float_precision=":")
               a    b           c      d    e
            0  0    a  2019/03/27  09:30   请问
            1  1    b  2019/03/26  10:002  2    c  2019/03/25  10:30   同意
            3  3    d  2019/03/24  11:00   UI
            4  4    e  2019/03/23  11:30   欧赔
            5  5    f  2019/03/22  13:00  NaN
            6  6    g  2019/03/21  13:30   东方
            7  7    h  2019/03/20  14:00   更换
            8  8  NaN  2019/03/19  14:30   接口
            9  9    j  2019/03/18  15:00   执行
            >>> pd.read_csv('test.csv',float_precision=".",dtype={'a':np.float64})['a'] # 貌似没啥用啊
            0    0.0
            1    1.0
            2    2.0
            3    3.0
            4    4.0
            5    5.0
            6    6.0
            7    7.0
            8    8.0
            9    9.0
            Name: a, dtype: float64
      • pd.read_table

      Deprecated since version 0.24.0. Use pandas.read_csv() instead, passing sep=’\t’ if necessary.
      Also supports optionally iterating or breaking of the file into chunks.
      Additional help can be found in the online docs for IO Tools.

      这是官方文档里写的一段话,大致意思就是在pandas 0.24.0以后的版本中不推荐使用read_table,你们可以用read_csv()代替,用sep=’\t’设置分隔符,所以read_table,就say 88 啦~

      • pd.read_excel,读取Excel格式文件
        • 参数解读
          • io 文件路径或者文件对象或者URL,跟read_csv中的filepath_or_buffer参数有点类似
            >>> pd.read_excel('test.xls')
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'))
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
          • sheet_name 表名,可以传int或者str或者list,默认为0,0表示第一个表str直接写表明,list可以传多个表,可以int和str混用
            >>> pd.read_excel(open('test.xlsx','rb'),sheet_name='Sheet1')
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),sheet_name=0)
               a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),sheet_name=[0,'Sheet2'])
            OrderedDict([(0,    a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行), ('Sheet2',    a  b           c      d   e
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行)])
          • header 表头开始的位置,不管是int还是header,第一个出现的行作为索引行
            >>> pd.read_excel(open('test.xlsx','rb'),header=1) # 从第一行开始,即将第一行变成列索引
               0  a  2019/03/27  09:30  请问
            0  1  b  2019/03/26  10:001  2  c  2019/03/25  10:30  同意
            2  3  d  2019/03/24  11:00  UI
            3  4  e  2019/03/23  11:30  欧赔
            4  5  f  2019/03/22  13:00  爱思
            5  6  g  2019/03/21  13:30  东方
            6  7  h  2019/03/20  14:00  更换
            7  8  i  2019/03/19  14:30  接口
            8  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),header=[1,2,3,4]) # 将1,2,3,4行变成表头
               0  a  2019/03/27  09:30  请问
               1  b  2019/03/26  10:002  c  2019/03/25  10:30  同意
               3  d  2019/03/24  11:00  UI
            0  4  e  2019/03/23  11:30  欧赔
            1  5  f  2019/03/22  13:00  爱思
            2  6  g  2019/03/21  13:30  东方
            3  7  h  2019/03/20  14:00  更换
            4  8  i  2019/03/19  14:30  接口
            5  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),header=[1,2,3,4])['a'] # 因为是从第一行,所以索引为a'
               b
               c
               d
            0  e
            1  f
            2  g
            3  h
            4  i
            5  j
            >>> pd.read_excel(open('test.xlsx','rb'),header=[0,1,2,3,4]) #  从第0行开始,即0行是列索引行
               a  b           c      d   e
               0  a  2019/03/27  09:30  请问
               1  b  2019/03/26  10:002  c  2019/03/25  10:30  同意
               3  d  2019/03/24  11:00  UI
            0  4  e  2019/03/23  11:30  欧赔
            1  5  f  2019/03/22  13:00  爱思
            2  6  g  2019/03/21  13:30  东方
            3  7  h  2019/03/20  14:00  更换
            4  8  i  2019/03/19  14:30  接口
            5  9  j  2019/03/18  15:00  执行
          • names 列名
            >>> pd.read_excel(open('test.xlsx','rb'),names=[1,2,3,4,5]) # 当列表跟表中列数匹配时,将列索引名更换为names里的名
               1  2           3      4   5
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),names=[1,2,3,3,5]) # 当出现重复时,会变成x:x.1
               1  2           3    3.1   5
            0  0  a  2019/03/27  09:30  请问
            1  1  b  2019/03/26  10:002  2  c  2019/03/25  10:30  同意
            3  3  d  2019/03/24  11:00  UI
            4  4  e  2019/03/23  11:30  欧赔
            5  5  f  2019/03/22  13:00  爱思
            6  6  g  2019/03/21  13:30  东方
            7  7  h  2019/03/20  14:00  更换
            8  8  i  2019/03/19  14:30  接口
            9  9  j  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),names=[1,2,3,5]) # 当数量不匹配时会报错
            ...
            ValueError: Number of passed names did not match number of header fields in the file
          • index_col
            >>> pd.read_excel(open('test.xlsx','rb'),index_col=1)
               a           c      d   e
            b
            a  0  2019/03/27  09:30  请问
            b  1  2019/03/26  10:00   二
            c  2  2019/03/25  10:30  同意
            d  3  2019/03/24  11:00  UI
            e  4  2019/03/23  11:30  欧赔
            f  5  2019/03/22  13:00  爱思
            g  6  2019/03/21  13:30  东方
            h  7  2019/03/20  14:00  更换
            i  8  2019/03/19  14:30  接口
            j  9  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),index_col='e')
                a  b           c      d
            e
            请问  0  a  2019/03/27  09:301  b  2019/03/26  10:00
            同意  2  c  2019/03/25  10:30
            UI  3  d  2019/03/24  11:00
            欧赔  4  e  2019/03/23  11:30
            爱思  5  f  2019/03/22  13:00
            东方  6  g  2019/03/21  13:30
            更换  7  h  2019/03/20  14:00
            接口  8  i  2019/03/19  14:30
            执行  9  j  2019/03/18  15:00
            >>> pd.read_excel(open('test.xlsx','rb'),index_col=['e',0])
            TypeError: list indices must be integers or slices, not str
            >>> pd.read_excel(open('test.xlsx','rb'),index_col=[1,0])
                          c      d   e
            b a
            a 0  2019/03/27  09:30  请问
            b 1  2019/03/26  10:00   二
            c 2  2019/03/25  10:30  同意
            d 3  2019/03/24  11:00  UI
            e 4  2019/03/23  11:30  欧赔
            f 5  2019/03/22  13:00  爱思
            g 6  2019/03/21  13:30  东方
            h 7  2019/03/20  14:00  更换
            i 8  2019/03/19  14:30  接口
            j 9  2019/03/18  15:00  执行
            >>> pd.read_excel(open('test.xlsx','rb'),index_col=[1,0]).loc['a','c']
            a
            0    2019/03/27
            Name: c, dtype: object
          • parse_cols 给列起别名
            Deprecated since version 0.21.0: Use usecols instead.
          • usecols
            Deprecated since version 0.24.0: Pass in a list of int instead from 0 to usecols inclusive.
      • pd.read_sql,读取SQL格式文件
      • pd.read_json,读取JSON格式文件
      • pd.read_html,读取html格式文件
      • pd.read_clipbard,读取剪切板数据
    • 导出:

      • df.to_csv,
      • df.to_excel,
      • df.tp_sql,
      • df.to_json,

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~