pandas学习笔记

pandas对象

pandas有俩对象,一个是series,一个是dataframe。

series

series是一维的,并且只储存相同的数据类型的元素,有两个属性,分别是index(索引,也叫数据标签)和values(保存了元素值的ndarray数组),可见,pandas是建立在numpy的基础之上的。

series对象可以由列表生成:

import pandas as pd
a = pd.Series([1, 5, 6])
print(a)

 结果如下:

可以看见,默认会在左侧生成从零开始的索引。 

也可以自己制定索引:

import pandas as pd
a = pd.Series([1, 5, 6], index=('c', 'b', 'm'))
print(a)

也可以用字典创建

其中,如果使用字典创建,也可以继续用index参数,输出结果是index查找的元素。

也可以使用ndarray创建

这里的series可以用numpy函数进行操作。

同时,加减乘除的操作会根据index自动对齐。

dataframe 

其对象表示的是矩阵的数据结构,这种数据结果类似excel表格。

它由按一定顺序排列的多列数组组成,其中每列数据类型必须一致(各个列之间可以不同)

它有行索引和列索引,可以看作一个具有共同索引的series字典。

它有仨属性:data,index,columns ,表示数据(还是ndarray数组啦),行索引和列索引。

创建方法和series差不多,列表创建(不指定index和columns默认从0开始):

直接上图,直观又清晰。

字典创建也可以:

如果指定index:

import pandas as pd
import numpy as np
a = pd.DataFrame({'chinese': [59, 89, 99], 'english': [87, 56, 22], 'math': [66, 78, 150]},index=['xiaoli', 'wangfang', 'zhangqiang'])
print(a)

结果:

 当然,使用字典也可以嵌套,py会根据键来作为索引,第一个键是列索引

注意

只有使用字典创建,后面的index的数目才可以与前面不保持一致,因为字典已经默认创建了索引。dataframes的字典键默认是列索引,因为series是一列数据,而dataframes可以由series字典创建。

其中abc会根据索引自动对齐 

索引 对象

a.index读取a的索引对象,生成一个由a的索引组成的不可变数组,这个数组有两个属性,values和name,其中values是列表,name是名字。例如:

import pandas as pd
import numpy as np
d = pd.DataFrame({'chinese': {'zhangqiang': 55, 'lili': 44, 'zcz': 0}, 'math': {'zhangqiang': 77, 'lili': 46, 'zcz': 0}, 'english': {'zhangqiang': 55, 'lili': 22, 'zcz': 0}})

m = pd.Index(d.index.values, name='name')
k = pd.Index(d.columns.values, name='objects')
f = pd.DataFrame(d, index=m, columns=k)
print(f)

 这其中的pd.Index()函数是生成一个index对象,同样有俩属性,values和name

multIndex多级索引

简单来讲就是索引也是可以分层的。

a = pd.Series([1,2,3,4,5,6],index=[['one','one','one','two','two','two'],['a','b','c','d','e','f']])

这样子它左列的index就分了两层 

为了更加直观记录,下面附图:

数据存储,也就是索引和切片啦

【】储存

对于series对象,就是

Series对象的下标存取。

单个标签       

标签切片

标签列表

单个整数下标

整数下标列表

整数下标切片

#布尔数组 In[47]:ser[[True,False,False]]

与Series对象类似,通过[]运算符也可以对DataFrame对象进行存取。DataFrame对象既有行索引也有列索引,但是对DataFrame对象通过[]运算符进行存取时,主要是针对列索引进行操作,支持下面几种下标对象。

① 单个标签:获取标签对应的列,返回Series对象。

② 标签列表:获取标签列表中多个标签对应的列构成的DataFrame对象。

③ 整数下标切片:获取切片中对应的多行构成的DataFrame对象,整数下标切片不包含终值。

④ 标签切片:获取切片中对应的多行构成的DataFrame对象,标签切片包含终值。

⑤ 布尔数组:获取布尔数组中为True的对应的行构成的DataFrame对象。

⑥ 布尔DataFrame:将DataFrame对象中False对应的元素设置为NaN。

df.loc[ ]存储

若.loc[]存取器的下标对象若是一个元组,则元组中的两个元素分别与DataFrame对象的两个轴对应,这时是对DataFrame对象中的某个元素(元组位置对应的元素)进行存取;若下标对象不是一个元组,且只有0轴,则是对DataFrame对象的行进行存取,若只有1轴,则是对DataFrame对象的列进行存取。

df.loc【‘chinese’,‘zhangqiang’】

 #.loc[]下标对象不是元组,且只有0轴,则取某行

df.loc["zhangqiang"]

#.loc[]下标对象不是元组,且只有1轴,则取某列

df.loc[[:,"Math"]]

除此之外,.loc[]存取器的每个轴的下标对象除了支持单个标签外,还支持标签列表、标签切片及布尔数组。 

df.iloc[ ]存储

.iloc[]存取器的下标是标签元组、标签切片、标签列表等,而.iloc[]的下标是位置下标,也就是整数下标。

df.ix [ ]存储

上述两种存储器的结合体。 

逻辑条件索引

可以属于布尔数组索引,也可以有&且和|或的逻辑

df[(df['Math'] > 80) & (df['English'] > 80)]

 当然也可以使用NumPy中的logical_and()(逻辑与)、logical_or()(逻辑或)、logical_xor()(逻辑异或)函数,完成同样的功能。

df[np.logical_and(df['Math']> 80,df['English']>80)]

除了使用布尔数组进行逻辑条件存取外,还可以使用一些函数快速进行逻辑条件存取。isin()、query()这些都行。

isin()函数根据特定值选择,返回满足条件的新的DataFrame对象。

df[df.Math.isin([87, 89])] 

输出math里等于87,89的

query()函数的参数是一个表达式字符串,字符串中可以使用and、not、or等关键字进行向量布尔运算,表达式中的变量名就是对应的列标签名。

df.query("Math>80 and English>80"))

感觉这个最好用qwq

文件读写

csv读写

读取CSV文件的两个主要函数是read_csv()和read_table()。它们都使用相同的解析代码来智能地将表格数据转换为DataFrame对象。

read_csv()

下面是其参数说明

excel读写

 

 pd.read_excel(io,sheetname=0,header=0,skiprows=None,index_col=None,names=None,arse_cols=None,date_parser=None,na_values=None,thousands=None,convert_float=True,has_index_names=None,converters=None,dtype=None,true_values=None,false_values=None,engine=None,squeeze=False,**kwds)

 HDF5文件读写

 HDF5(Hierarchical Data Format Version 5,分层数据格式版本5)是存储科学数据的一种文件格式,文件扩展名为.h5。它以C库的形式提供,因此存取速度非常快,且可在文件内部按照明确的层次存储数据(HDF5中“HDF”表示的就是分层数据格式)。HDF5还具有很多其他语言的接口,如Java、MATLAB和Python等。

HDFS文件像一个保存数据的文件系统,其中有两种类型的数据对象。

① 资料数据(dataset):类似文件系统中的文件,可以为用户保存数据。

② 目录(group):类似文件系统中的文件夹,可以包含其他的目录和资料数据。

HDFStore

Pandas中的HDFStore构造函数用于生成管理HDF5文件I/O操作的对象,其主要参数如下。

① path:字符型输入,用于指定HDF5文件的名称(不在当前工作目录时需要带上完整路径信息,并且注意文件分隔符\的转义问题)。

② mode:用于指定I/O操作的模式,与Python内置的open()函数中的参数一致,默认为'a'模式,即当指定文件已存在时不影响原有数据写入,指定文件不存在时则新建文件;'r'为只读模式;'w'为创建新文件(会覆盖同名旧文件);'r+'模式与'a'作用相似,但要求文件必须已经存在。

③ complevel:int型,用于控制HDF5文件的压缩水平,取值范围为0~9。值越大则文件的压缩程度越大,占用的空间越小,但相应地,在读取文件时需要更多解压缩的时间成本。默认为0,代表不压缩。

④ complib:指定压缩格式,HDF5文件的存储支持压缩模式,使用的压缩模式是blocs,其速度最快,也是Pandas默认支持的压缩格式。使用压缩可以提高磁盘利用率,节省空间。

例如:

a = pd.HDFStore("data.h5",complib="blosc",complevel=9)

接下来创建Pandas中不同的两种对象Series和DataFrame,并将它们共同保存到store对象中。HDFStore对象支持字典接口,因此可以利用键值对将不同的数据存入store对象中,也可以使用store对象的put()函数将数据存入store对象中,store对象的put()函数的主要参数如下。

① key:指定HDF5文件中待写入数据的key。

② value:指定与key对应的待写入的数据。

③ format:字符型类型,用于指定写入的模式,'fixed'对应的模式速度快,但是不支持追加也不支持检索;'table'对应的模式以表格的模式写入,速度稍慢,但是支持直接通过store对象进行追加和表格查询操作。 

data1=[23,24,25]          

index=pd.Index(['zhangsan','lisi','wangwu'],name="name")           ser=pd.Series(data=data1,index=index)          

data=[{'Chinese':81,'English':74,'Math':87},{'Chinese':92,'English':85,'Math':78},{'Chinese':83,'English':96,'Math':89}]          

df = pd.DataFrame(data,index=['zhangsan','lisi','wangwu'])          

#采用键值对方式将ser写入store中          

store["data/ser1"]=ser          

#采用put()函数把df写入store中          

store.put(key= "data/df1 ",value=df)

运算

大部分和numpy差不多。特别的,当df与ser进行运算时,默认是与行进行(类似多维numpy与一维numpy),遵循广播原则

排序:

ser.sort_values()

‘’‘降序'''

ser.sort_values(ascending=False))

df根据某一特定值排序:

df.sort_values(by="Math") 

排名是根据Series对象的值或DataFrame对象的某几列的值进行排名,Pandas中的rank()函数可以帮助我们完成排名。该函数的参数主要有ascending和method。ascending默认为True,表示升序,如果希望降序则设置ascending=False即可;method参数是说明数据相同时的排序的方法

汇总和统计:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值