第二章Pandas基础

import numpy as np
import pandas as pd
pd.__version__
'1.1.3'

一、文件读取和写入
1、文件读取
read_csv 从文件、URL、文件型对象中加载带有分隔符的数据,默认分隔符为逗号
read_table 从文件、URL、文件型对象中加载带有分隔符的数据,默认分隔符为制表符
read_excel从文件、URL、文件型对象中加载带有分隔符的数据,默认应该是空格吧

这两个函数参数太多了,下面演示下常用的几个参数(分析所有参数太傻了,emm…),包括:path、sep、heder、index_col、usecols、skiprows、parse_dates、nrows

sep用来指定文件的分隔符,read_csv默认为逗号,read_table默认为制表符’\t’
header用来指定列名所在的行数,默认为0,None表示第一行不做列名
index_col指定某一列或某几列作为行索引
usecols表示读取列的集合,这个参数每次都不会拼写。。。
skiprows表示可以忽略的行数
parse_daates表示需要转换为时间的列,静待以后进一步学习理解
nrows表示读取的数据行数

#首先是header
pd.read_csv('my_csv.csv')
pd.read_csv('my_csv.csv',header=None)
#sep,由于用的函数是read_table,要指定分隔符才可以正常读取
pd.read_table('my_csv.csv')
#首先是header
pd.read_csv('my_csv.csv')
pd.read_csv('my_csv.csv',header=None)
#sep,由于用的函数是read_table,要指定分隔符才可以正常读取
pd.read_table('my_csv.csv')
pd.read_table('my_csv.csv',sep=',')
#index_col,这个地方是可以拿多个列出来作为索引的
pd.read_csv('my_csv.csv',index_col=['col1'])
#usecol
pd.read_csv('my_csv.csv',usecols=['col1','col3'])
#skiprows
pd.read_csv('my_csv.csv',skiprows=0)
#parse_data   parse是解析的意思(原谅我太菜)
#列的选择只能是以数组形式,不能是单个的字符,其他参数选择没这个要求
pd.read_csv('my_csv.csv',parse_dates=['col5'])
pd.read_csv('my_csv.csv',nrows=2)
​
​
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
0   1   2   3   4
0   col1    col2    col3    col4    col5
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
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
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
col2    col3    col4    col5
col1
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
col1    col3
0   2   1.4
1   3   3.4
2   6   2.5
3   5   3.2
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
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
col1    col2    col3    col4    col5
0   2   a   1.4 apple   2020/1/1
1   3   b   3.4 banana  2020/1/2

总结:1、我写一个.csv表的时候逗号必须英文输入
2、parse_dates选取某列时必须以数组形式输入(否则报错),其他参数则没得这个要求,可以不要那个中括号
3、这样写作业要好久,但是很清楚整洁。。。
4、不能指定数据类型吗?上次numpy好像可以
5、参数sep使用的是正则表达式,有待进一步理解。。。。

2、数据写入

2、数据写入
to_csv方法 数据输出为分隔符格式的文本
来看看一些常用的参数,我也不知道它有多少参数[捂脸]
sep 用来指定输出数据的间隔符,默认是逗号,这里好像不要正则化表达
index 默认会写出行索引,常设为False
header 把头给它拧下来(False,禁用列标签)
columns 用来指定具体的列和输出顺序
na_rep 缺失值的输出默认为空字符,我们也可以指定,比如na_rep=‘Null’

import sys
import numpy as np
import pandas as pd
data=pd.read_csv('my_csv.csv')
#导出为逗号分隔的文件
data.to_csv('out_csv.csv')
#sep  导出为制表符分隔
data.to_csv('out_csv_sep1.csv',sep='\t')
data.to_csv('out_csv_sep2.csv',sep='|')
#index、header、cols
data.to_csv('out_csv_index.csv',index=False,columns=['col5','col2','col2'])
data.to_csv('out_csv_header.csv',header=False)
#.txt
data.to_csv('out_txt.txt',sep=' ')
#excel
#data.to_excel('out_excel.xlsx')

总结:
1、series也有to_csv的用法
2、可以用to_csv保存为txt文件
3、写文件名的的时候记得写后缀,不然输出木有后缀,刚开始我全搞忘记了
4、还有to_excel方法用来保存为excel文件,然而我电脑没跑出来
5、还有to_markdown、to_latex、from_csv不知道是干嘛的
6、这样写感觉好花时间
7、colums这个参数也要用中括号

二、基本数据结构
1、Series(顺序)

Series 一般由四个部分组成,分别是序列的值 data 、索引 index ,默认为0到N-1、存储类型 dtype 、序列的名字 name 。其中,索引也可以指定它的名字,默认为空。 下面通过代码看一些常用Series的基操:

#最简单的
​
obj=pd.Series([14,7,-5,3])
obj
#通过.方式获取属性
obj.values
obj.index
obj.dtype
obj.name
#index
obj1=pd.Series([4,7,-5,3],index=['d','b','a','c'],name='datawhale')
obj1
obj1.index
obj1.name
obj1.shape
#用标签对数据进行索引
obj1['a']
obj1[['a','d']]
#布尔值索引
obj1[obj1>0]
#数学操作
obj1*2;np.exp(obj1)
#Series跟python字典很像,如果我们有一个字典,怎么转成Series呢
dic={'orange':2,'apple':5,'mango':7,'梨子':10}
dic
obj2=pd.Series(dic)
obj2
​
0    14
1     7
2    -5
3     3
dtype: int64
array([14,  7, -5,  3], dtype=int64)
RangeIndex(start=0, stop=4, step=1)
dtype('int64')
d    4
b    7
a   -5
c    3
Name: datawhale, dtype: int64
Index(['d', 'b', 'a', 'c'], dtype='object')
'datawhale'
(4,)
-5
a   -5
d    4
Name: datawhale, dtype: int64
d    4
b    7
c    3
Name: datawhale, dtype: int64
d     8
b    14
a   -10
c     6
Name: datawhale, dtype: int64
d      54.598150
b    1096.633158
a       0.006738
c      20.085537
Name: datawhale, dtype: float64
{'orange': 2, 'apple': 5, 'mango': 7, '梨子': 10}
orange     2
apple      5
mango      7
梨子        10
dtype: int64

总结:1、Series感觉跟字典很像
2、series自动索引对齐很有用,要多实操 3、object是一种混合储存类型

2、DatoFrame

参数 index、colums、dtype
列索引 :frame[col_name]、frame[col_list]
属性查询:.方法,values、index、columns、dtypes、object、shape

数据矩阵,直接基操

#创建,直接创建
data=[[1,'a',1.2],[2,'b',2.2],[3,'c',3.2]]
df = pd.DataFrame(data,index=['row_0',"row_1",'row_2'],columns=['col_1','col_2','col_3'],dtype='object')
df
#通过字典创建
dic={'col_1':[1,'a',1.2],'col_2':[2,'b',2.2],'col_3':[3,'c',3.2]}
df=pd.DataFrame(dic)
df
df['col_1']
df[['col_3','col_1','col_3']]
​
col_1   col_2   col_3
row_0   1   a   1.2
row_1   2   b   2.2
row_2   3   c   3.2
col_1   col_2   col_3
0   1   2   3
1   a   b   c
2   1.2 2.2 3.2
0      1
1      a
2    1.2
Name: col_1, dtype: object
col_3   col_1   col_3
0   3   1   3
1   c   a   c
2   3.2 1.2 3.2

总结:1、框没有name属性和参数
2、通过字典创建时,键会作为列索引
3、当创建的一些元素的位置和运算位置没有东西时,会赋值为空,DataFrame也有自动对齐操作

三、常用的基本函数

head,tail函数分别表示返回表或者序列的前n行和后n行,其中n默认为5
info,describe分别返回表的信息概况和表中数值列对应的主要统计量
info, describe只能实现最佳信息的展示,如果想要对一份数据集进行全面且有效的观察,特别是在列对准的情况下,推荐使用pandas-profiling包,使其在第十一章被再次提到。
总结:
总结:这几个函数都是通过.方法调用,调用时记得加()

2.特征统计函数

在 Series 和 DataFrame 上定义了许多统计函数,最常见的是 sum, mean, median, var, std, max, min 。
quantile:分位数
count:非缺失值个数
idmax:最大值对应的索引

3. 唯一值函数

对序列使用 unique 和 nunique 可以分别得到其唯一值组成的列表和唯一值的种个量数。
value_counts 可以得到唯一值和其对应出现的频数

如果想要观察多个列组合的唯一值,可以使用 drop_duplicates 。其中的关键参数是 keep ,默认值 first 表示每个组合保留第一次出现的所在行, last 表示保留最后一次出现的所在行, False 表示把所有重复组合所在的行剔除,这时剔除出来行的索引为自然索引。

duplicated 和 drop_duplicates 的功能类似,但前者返回了是否为唯一值的布尔列表,其 keep 参数与后者一致。其返回的序列,把重复元素设为 True ,否则为 False 。 drop_duplicates 等价于把 duplicated 为 True 的对应行剔除。

替换函数

一般而言,替换操作是针对某一个列进行的,因此下面的例子都以 Series 举例。 pandas 中的替换函数可以归纳为三类:映射替换、逻辑替换、数值替换。其中映射替换包含 replace 方法、第八章中的 str.replace 方法以及第九章中的 cat.codes 方法,此处介绍 replace 的用法。
在 replace 中,可以通过字典构造,或者传入两个列表来进行替换。
另外, replace 还有一种特殊的方向替换,指定 method 参数为 ffill 则为用前面一个最近的未被替换的值进行替换, bfill 则使用后面最近的未被替换的值进行替换。从下面的例子可以看到,它们的结果是不同的。
逻辑替换包括了 where 和 mask ,这两个函数是完全对称的: where 函数在传入条件为 False 的对应行进行替换,而 mask 在传入条件为 True 的对应行进行替换,当不指定替换值时,替换为缺失值。
数值替换包含了 round, abs, clip 方法,它们分别表示按照给定精度四舍五入、取绝对值和截断:

5. 排序函数¶

排序共有两种方式,其一为值排序,其二为索引排序,对应的函数是 sort_values 和 sort_index 。默认参数 ascending=True 为升序,False为降序。
在排序中,经常遇到多列排序的问题,

6. apply方法¶

apply 方法常用于 DataFrame 的行迭代或者列迭代,它的 axis 含义与第2小节中的统计聚合函数一致, apply 的参数往往是一个以序列为输入的函数。同样的,可以利用 lambda 表达式使得书写简洁。若指定 axis=1 ,那么每次传入函数的就是行元素组成的 Series ,其结果与之前的逐行均值结果一致。
得益于传入自定义函数的处理, apply 的自由度很高,但这是以性能为代价的。一般而言,使用 pandas 的内置函数处理和 apply 来处理同一个任务,其速度会相差较多,因此只有在确实存在自定义需求的情境下才考虑使用 apply 。

四、窗口对象

pandas 中有3类窗口,分别是滑动窗口 rolling 、扩张窗口 expanding 以及指数加权窗口 ewm 。需要说明的是,以日期偏置为窗口大小的滑动窗口将在第十章讨论,指数加权窗口见本章练习。

五、练习¶

Ex1:口袋妖怪数据集
现有一份口袋妖怪的数据集,下面进行一些背景说明:

#代表全国图鉴编号,不同行存在相同数字则表示为该妖怪的不同状态

妖怪具有单属性和双属性两种,对于单属性的妖怪, Type 2 为缺失值

Total, HP, Attack, Defense, Sp. Atk, Sp. Def, Speed 分别代表种族值、体力、物攻、防御、特攻、特防、速度,其中种族值为后6项之和

import numpy as np
import pandas as pd
df=pd.read_csv('pokemon.csv')
df.shape
#1、对 HP, Attack, Defense, Sp. Atk, Sp. Def, Speed 进行加总,验证是否为 Total 值。
nature=df[['HP','Attack','Defense','Sp. Atk','Sp. Def','Speed']]
nature_sum=nature.sum(axis=1)
#答:从结果可知,属性值的和等于Total的值
"""
2、对于#重复的妖怪只保留第一条记录,解决以下问题:
​
a、求第一属性的种类数量和前三多数量对应的种类
​
b、求第一属性和第二属性的组合种类
​
c、寻求尚未出现过的属性组合
"""
df_demo=df.drop_duplicates('#')
df_demo.head()     #df_demo为#重复的妖怪只保留了第一条记录
df_demo.shape
df_demo['Type 1'].nunique()#共有18种
df_demo['Type 1'].value_counts().sort_values(ascending=False)#前三种分别是water、normal\grass
​
(800, 11)
'\n2、对于#重复的妖怪只保留第一条记录,解决以下问题:\n\na、求第一属性的种类数量和前三多数量对应的种类\n\nb、求第一属性和第二属性的组合种类\n\nc、寻求尚未出现过的属性组合\n'
#   Name    Type 1  Type 2  Total   HP  Attack  Defense Sp. Atk Sp. Def Speed
0   1   Bulbasaur   Grass   Poison  318 45  49  49  65  65  45
1   2   Ivysaur Grass   Poison  405 60  62  63  80  80  60
2   3   Venusaur    Grass   Poison  525 80  82  83  100 100 80
4   4   Charmander  Fire    NaN 309 39  52  43  60  50  65
5   5   Charmeleon  Fire    NaN 405 58  64  58  80  65  80
(721, 11)
18
Water       105
Normal       93
Grass        66
Bug          63
Psychic      47
Fire         47
Rock         41
Electric     36
Ground       30
Dark         28
Poison       28
Fighting     25
Dragon       24
Ghost        23
Ice          23
Steel        22
Fairy        17
Flying        3
Name: Type 1, dtype: int64

##队长,我拖队伍后腿了,下次争取做完,把之前的补上

Datawhale pandas学习任务二:pandas基础相关推荐

  1. pandas学习task02 pandas基础

    一.文件的读取和写入 1. 文件读取 import numpy as np import pandas as pd df_csv = pd.read_csv(r"C:\Users\zhouk ...

  2. pandas学习之pandas基础

    感想 一.窗口对象 pandas 中有 3 类窗口,分别是滑动窗口 rolling .扩张窗口 expanding 以及指数加权窗口 ewm. 1.rolling():移动窗口,常用参数window ...

  3. Datawhale组队学习-Python编程基础-01

    文章目录 变量.运算符与数据类型 1.注释 2.运算符 3.变量和赋值 4.数据类型与转换 5.print()函数 练习题 位运算 1.原码.反码和补码 2.按位非操作~ 3.按位与操作& 4 ...

  4. Datawhale组队学习-Python编程基础-07

    文章目录 类与对象 1.对象 = 属性 + 方法 2.self是什么? 3.Python的魔法方法 4.共有和私有 5.继承 6.组合 7.类.类对象和实例对象 8.什么是绑定? 9.一些相关的内置函 ...

  5. python数据分析-pandas学习

    文章目录 一.pandas环境的搭建 1.pandas 简介 2.pandas安装和调用 二.pandas学习 1.pandas简介 2.pandas学习资源 3.pandas核心数据结构 4.Ser ...

  6. [Pandas 学习笔记] - No.1 pandas学习笔记

    pandas学习笔记 pandas是基于numpy开发出的数据分析包,用于高效地操作大型数据集.pandas的数据结构有三种 分别为 series,dataframe和panel,对应一维,二维,三维 ...

  7. Pandas学习总结

    文章目录 Pandas学习总结 一.pandas数据结构介绍 Series (1)Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成 ...

  8. Pandas学习(3)——Pandas基础

    本文基于Datawhale提供的Pandas学习资料. 均为本人理解,如有不足或错误地方欢迎补充批评指正,如有侵权,联系速删. 开始学习前,请确认已经安装了 xlrd, xlwt, openpyxl ...

  9. pandas dataframe创建_Python数据分析基础之Pandas学习 (上)

    全文共 20592 字,63 幅图,预计阅读时间 52 分钟.[注:本帖小节 2.2 用万矿里的 WindPy 来下载金融数据]0引言 本文是 Python 系列的第六篇 Python 入门篇 (上) ...

最新文章

  1. [翻译]MongoDb 架构(MongoDb Architecture)
  2. 报错:selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This versio
  3. r语言ggplot2 多线图绘制图例_plotnine: Python版的ggplot2作图库
  4. 2017计算机基本配置检测表,2017整理如何查看电脑的硬件配置信息?查看电脑硬件配.ppt...
  5. 【2017年第3期】面向共享的政府大数据质量标准化问题研究
  6. 一款非常好用的音乐标签及管理工具:Yate for Mac
  7. hana抽数到mysql,HANA数据库管理Tenant DB常用操作
  8. 基于tensorflow深度学习的中文的命名实体识别
  9. Hibernate注释总结
  10. php查找之二分查找
  11. Changer常用的软件
  12. 苹果 ios mdm服务器搭建
  13. 阿里云域名解析详细步骤讲解
  14. 互联网大脑加速进化,2018年类脑智能巨系统在中国突然爆发
  15. Java个人职业发展方向
  16. delphi7中的局部变量和全局变量
  17. java多个文件压缩并加密
  18. IPv4如何向IPv6过渡?IPv6改造方案有哪些?
  19. Qt窗口之间传值和结构体数据
  20. python如何打出英文括号_用python的re(正则表达式)模块匹配英文环境下的括号

热门文章

  1. ThinkPHP5+七牛云文件操作 方法梳理
  2. Backlight driver on Android
  3. 0104无穷小和无穷大-函数与极限
  4. 调查计算机在大学中的应用,计算机技术在大学教学中的应用
  5. 隐私计算头条周刊(2.27-3.5)
  6. Keil5写的第一个ARM汇编
  7. 东华大学计算机考研学校,东华大学计算机考研交流
  8. 概率 | 【提神醒脑】自用笔记串联二 —— 数字特征、大数定律、统计量
  9. 在sqlserver中脏读 with(nolock)的使用
  10. 抖音 vs 即刻小视频(微信小视频)-竞品对比