pandas学习笔记(1) 文件的读取和写入


前言

众所周知,pandas是个功能强大的python库,慢慢写吧。基本可分为三大模块:基础知识、四类操作、四类数据,涵盖了pandas的所有核心操作与特性。

在第一个模块中,包含了python基础、numpy基础和pandas基础三大部分。其中,python基础将回顾列表推导式、匿名函数、map对象以及zip对象的概念与应用;numpy基础包含了常见的数组操作,如:数组构造、数组变形与合并、数组切片、数组函数以及广播机制。pandas基础中涵盖了文件IO、数据存储结构、滑窗对象、以及pandas中的所有基本函数。

在第二个模块中,包含了索引、分组、变形、连接四类操作的介绍。其中,第三章索引涵盖了单层索引、多层索引、索引设定以及索引运算的内容;第四章分组介绍了分组对象的基本概念、聚合函数的使用、变换函数与过滤函数的用法,以及跨列分组的相关内容;第五章变形将讨论长宽表的变形、索引间的变形,以及类变形函数;第六章连接将涉及关系连接与方向连接的区别于使用方法,以及类变形函数的相关内容。

在第三个模块中,包含了缺失数据、文本数据、分类数据和时序数据的介绍。其中,第七章缺失数据将涉及其四大操作————汇总、删除、填充、插值,以及Nullable类型的详细介绍;第八章文本数据中将涵盖str对象,正则基础,文本的五大操作————拆分、合并、匹配、替换、提取,以及常用字符串函数;第九章分类数据将涉及cat对象、有序类别以及区间类别;第十章时序数据将涵盖时间戳对象、时间差对象、日期偏置、时序滑窗以及时序分组的内容。

我的学习是看Datawhale的joyful-pandas项目

一、文件读取

import numpy as np
import pandas as pd
pd.__version__

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

In [4]: df_csv = pd.read_csv('data/my_csv.csv')

In [5]: df_csv
Out[5]: 
   col1 col2  col3    col4      col5
0     2    a   1.4   apple  2020/1/1
1     3    b   3.4  banana  2020/1/2
2     6    c   2.5  orange  2020/1/5
3     5    d   3.2   lemon  2020/1/7

In [6]: df_txt = pd.read_table('data/my_table.txt')

In [7]: df_txt
Out[7]: 
   col1 col2  col3             col4
0     2    a   1.4   apple 2020/1/1
1     3    b   3.4  banana 2020/1/2
2     6    c   2.5  orange 2020/1/5
3     5    d   3.2   lemon 2020/1/7

In [8]: df_excel = pd.read_excel('data/my_excel.xlsx')

In [9]: df_excel
Out[9]: 
   col1 col2  col3    col4      col5
0     2    a   1.4   apple  2020/1/1
1     3    b   3.4  banana  2020/1/2
2     6    c   2.5  orange  2020/1/5
3     5    d   3.2   lemon  2020/1/7

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

In [10]: pd.read_table('data/my_table.txt', header=None)
Out[10]: 
      0     1     2                3
0  col1  col2  col3             col4
1     2     a   1.4   apple 2020/1/1
2     3     b   3.4  banana 2020/1/2
3     6     c   2.5  orange 2020/1/5
4     5     d   3.2   lemon 2020/1/7

In [11]: pd.read_csv('data/my_csv.csv', index_col=['col1', 'col2'])
Out[11]: 
           col3    col4      col5
col1 col2                        
2    a      1.4   apple  2020/1/1
3    b      3.4  banana  2020/1/2
6    c      2.5  orange  2020/1/5
5    d      3.2   lemon  2020/1/7

In [12]: pd.read_table('data/my_table.txt', usecols=['col1', 'col2'])
Out[12]: 
   col1 col2
0     2    a
1     3    b
2     6    c
3     5    d

In [13]: pd.read_csv('data/my_csv.csv', parse_dates=['col5'])
Out[13]: 
   col1 col2  col3    col4       col5
0     2    a   1.4   apple 2020-01-01
1     3    b   3.4  banana 2020-01-02
2     6    c   2.5  orange 2020-01-05
3     5    d   3.2   lemon 2020-01-07

In [14]: pd.read_excel('data/my_excel.xlsx', nrows=2)
Out[14]: 
   col1 col2  col3    col4      col5
0     2    a   1.4   apple  2020/1/1
1     3    b   3.4  banana  2020/1/2

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

In [15]: pd.read_table('data/my_table_special_sep.txt')
Out[15]: 
              col1 |||| col2
0  TS |||| This is an apple.
1    GQ |||| My name is Bob.
2         WT |||| Well done!
3    PT |||| May I help you?

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

In [16]: pd.read_table('data/my_table_special_sep.txt',
   ....:               sep=' \|\|\|\| ', engine='python')
   ....: 
Out[16]: 
  col1               col2
0   TS  This is an apple.
1   GQ    My name is Bob.
2   WT         Well done!
3   PT    May I help you?

二、文件写入

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

In [17]: df_csv.to_csv('data/my_csv_saved.csv', index=False)

In [18]: df_excel.to_excel('data/my_excel_saved.xlsx', index=False)

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

In [19]: df_txt.to_csv('data/my_txt_saved.txt', sep='\t', index=False)

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

In [20]: print(df_csv.to_markdown())

In [21]: print(df_csv.to_latex())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值