• 文件的读取和写入


    文件读取

    pandas 可以读取的文件格式有很多,这里主要介绍读取 csv, excel, txt 文件。

    我将以下表格内容分别存储在 csv、excel、txt 文件中,并分别读取它们。

    seqpricecategorydate
    a1.4apple2022/7/1
    b3.4banana2022/7/5
    c2.5orange2022/7/12
    d1.2lemon2022/7/30

    pandas读取csv文件

    import pandas as pd
    
    df_csv = pd.read_csv('my_csv.csv')
    print(df_csv)  # 索引列从表格内容的第二行开始算起,第一行视作表头
    ---------
      seq  price category       date
    0   a    1.4    apple   2022/7/1
    1   b    3.4   banana   2022/7/5
    2   c    2.5   orange  2022/7/12
    3   d    1.2    lemon  2022/7/30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    pandas读取excel文件

    import pandas as pd
    
    df_excel = pd.read_excel('my_excel.xlsx')
    print(df_excel)  # 索引列从表格内容的第二行开始算起,第一行视作表头
    ---------
      seq  price category       date
    0   a    1.4    apple 2022-07-01
    1   b    3.4   banana 2022-07-05
    2   c    2.5   orange 2022-07-12
    3   d    1.2    lemon 2022-07-30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    pandas读取txt文件

    import pandas as pd
    
    df_txt = pd.read_table('my_txt.txt')
    print(df_txt)  # 索引列从表格内容的第二行开始算起,第一行视作表头
    ---------
      seq  price category       date
    0   a    1.4    apple   2022/7/1
    1   b    3.4   banana   2022/7/5
    2   c    2.5   orange  2022/7/12
    3   d    1.2    lemon  2022/7/30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这里有一些常用的公共参数,header=None 表示第一行不作为列名;index_col 表示把某一列或几列作为索引;usecols 表示读取列的集合,默认读取所有的列;parse_dates 表示需要转化为时间的列;nrows 表示读取的数据行数。上面这些参数在上述的三个函数里都可以使用,下面以读取csv文件为例。

    import pandas as pd
    
    df_csv = pd.read_csv('my_csv.csv', header=None)
    print(df_csv)  # 索引列从表格内容的第一行开始算起
    ---------
         0      1         2          3
    0  seq  price  category       date
    1    a    1.4     apple   2022/7/1
    2    b    3.4    banana   2022/7/5
    3    c    2.5    orange  2022/7/12
    4    d    1.2     lemon  2022/7/30
    
    
    df_csv = pd.read_csv('my_csv.csv', index_col='category')
    print(df_csv)  # 指定某列作为索引列
    ---------
             seq  price       date
    category                      
    apple      a    1.4   2022/7/1
    banana     b    3.4   2022/7/5
    orange     c    2.5  2022/7/12
    lemon      d    1.2  2022/7/30
    
    
    df_csv = pd.read_csv('my_csv.csv', index_col=['seq', 'date'])
    print(df_csv)  # 指定某几列作为索引列
    ---------
                   price category
    seq date                     
    a   2022/7/1     1.4    apple
    b   2022/7/5     3.4   banana
    c   2022/7/12    2.5   orange
    d   2022/7/30    1.2    lemon
    
    
    df_csv = pd.read_csv('my_csv.csv', usecols=['seq', 'category'])
    print(df_csv)  # 读取指定列
    ---------
      seq category
    0   a    apple
    1   b   banana
    2   c   orange
    3   d    lemon
    
    
    df_csv = pd.read_csv('my_csv.csv', parse_dates=['date'])
    print(df_csv)  # 将指定列转化为时间
    ---------
      seq  price category       date
    0   a    1.4    apple 2022-07-01
    1   b    3.4   banana 2022-07-05
    2   c    2.5   orange 2022-07-12
    3   d    1.2    lemon 2022-07-30
    
    
    df_csv = pd.read_csv('my_csv.csv', nrows=2)
    print(df_csv)
    ---------
      seq  price category      date
    0   a    1.4    apple  2022/7/1
    1   b    3.4   banana  2022/7/5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    在读取 txt 文件时,经常遇到分隔符非空格的情况,read_table 有一个分割参数 sep ,它使得用户可以自定义分割符号,以进行 txt 数据的读取。

    import pandas as pd
    
    df_txt = pd.read_table('my_txt.txt')
    print(df_txt)
    ---------
      seq, price, category, date
    0    a, 1.4, apple, 2022/7/1
    1   b, 3.4, banana, 2022/7/5
    2  c, 2.5, orange, 2022/7/12
    3   d, 1.2, lemon, 2022/7/30
    
    
    df_txt = pd.read_table('my_txt.txt', sep=',')
    print(df_txt)
    ---------
      seq   price  category        date
    0   a     1.4     apple    2022/7/1
    1   b     3.4    banana    2022/7/5
    2   c     2.5    orange   2022/7/12
    3   d     1.2     lemon   2022/7/30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    下面读取的表以||||为分割,直接读取的结果显然不是理想的,这时可以使用 sep ,同时需要指定引擎为 python 。在使用 read_table 的时候需要注意,参数 sep 中使用的是正则表达式,因此需要对 | 进行转义
    变成 \| ,否则无法读取到正确的结果。

    import pandas as pd
    
    df_txt = pd.read_table('my_txt.txt')
    print(df_txt)
    ---------
      seq |||| category
    0      a |||| apple
    1     b |||| banana
    2     c |||| orange
    3      d |||| lemon
    
    
    df_txt = pd.read_table('my_txt.txt', sep='\|\|\|\|', engine='python')
    print(df_txt)
    ---------
      seq   category
    0   a      apple
    1   b     banana
    2   c     orange
    3   d      lemon
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    数据写入

    一般在数据写入中,最常用的操作是把 index 设置为 False ,特别是当索引没有特殊意义的时候,这样能在保存数据时去除索引。

    pandas 中没有定义 to_table 函数,但是 to_csv 可以保存为 txt 文件,并且允许自定义分隔符,常用制表符 \t 分割。

    # 数据存储为csv文件
    df_csv.to_csv('my_csv_saved.csv', index=False)
    
    # 数据存储为excel文件
    df_excel.to_excel('my_excel_saved.xlsx', index=False)
    
    # 数据存储为txt文件
    df_txt.to_csv('my_txt_saved.csv', sep='\t', index=False)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果想要把表格快速转换为 markdown 和 latex 语言,可以使用 to_markdown 和 to_latex 函数,此处需要安装 tabulate 包。

    df_csv = pd.read_csv('my_csv.csv')
    print(df_csv.to_markdown())
    ---------
    |    | seq   |   price | category   | date      |
    |---:|:------|--------:|:-----------|:----------|
    |  0 | a     |     1.4 | apple      | 2022/7/1  |
    |  1 | b     |     3.4 | banana     | 2022/7/5  |
    |  2 | c     |     2.5 | orange     | 2022/7/12 |
    |  3 | d     |     1.2 | lemon      | 2022/7/30 |
    
    
    df_csv = pd.read_csv('my_csv.csv')
    print(df_csv.to_latex())
    ---------
    \begin{tabular}{llrll}
    \toprule
    {} & seq &  price & category &       date \\
    \midrule
    0 &   a &    1.4 &    apple &   2022/7/1 \\
    1 &   b &    3.4 &   banana &   2022/7/5 \\
    2 &   c &    2.5 &   orange &  2022/7/12 \\
    3 &   d &    1.2 &    lemon &  2022/7/30 \\
    \bottomrule
    \end{tabular}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    网络工程师练习题
    手绘地图制作的关键点之“图层覆盖”
    【蓝桥杯基础算法】dfs(上)组合数,全排列
    Ubuntu本地快速搭建web小游戏网站,公网用户远程访问
    【FileZila】实现windows与Linux系统文件互传
    【matlab】KMeans KMeans++实现手写数字聚类
    SpringCloud五大组件原理及面试题
    laravel框架介绍(二)
    Vue3 组件间通信的七种方式
    C#基础知识
  • 原文地址:https://blog.csdn.net/weixin_48158964/article/details/126077060