科学计算库(四)pandas的Series和DataFrame

目录

引入模块

一、Series

创建Series

属性

方法

Series值的获取

切片

花式索引

Series的运算

缺失值处理

二、DataFrame 

创建

取值

切片

花式索引

获取行

获取行和列

修改值

新增行和列

删除列和行


pandas中主要有两种数据结构,分别是:Series和DataFrame。  

Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。注意:Series中的索引值是可以重复的。

 DataFrame:一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

引入模块

import pandas as pd

一、Series

创建Series

使用列表创建Series,如果不指定索引,会自动创建数值型索引,从0开始
pd.Series([1,2,3])

使用字典创建Series,会把字典的key当作Series索引

属性

ser.dtype 查看数据类型,如果未指定索引,默认使用RangeIndex
ser.index 查看索引
ser.index.dtype 查看索引的数据类型
ser.values 获取值,类型是ndarray

使用index参数设置索引,dtype设置数据类型
ser=pd.Series([1,2,3],index=['key1','key2','key3'],dtype='uint8')

Name属性
ser.name="班级总人数"  #设置Series列表名
ser.index.name="班级"   #设置索引名

axes 类似于index,只是返回列表类型
empty 如果Series为空,返回True
ndim 返回维度数
size 返回大小

方法

head(n) 返回前n行
tail(n) 返回最后n行


Series值的获取

1、使用索引取值
ser['key1']
2、使用下标取值
ser[0]

 

切片

使用索引切片,会包含两边的值,闭合区间
ser['key1':'key5']
下标切片,不包含末尾的值
ser[1:5]

花式索引

【】里面再套一个【】

ser[['key1','key3']],获取索引是key1和key3的行数据
ser[[1,3,4]]  # 通过下标取第2、4、5行数据

如果有相同的索引值
1、通过同名索引取值会取到多个值
2、无法通过不唯一的索引切片

 

Series的运算

numpy中的数组运算方法都保留到Series中了,可以使用numpy的任意运算方法。
运算的时候会自动对齐key值
如果一个有key一个没有的话,运算后会是nan           

phone_sales=pd.Series([7250,6050,4150,3700,3200,2800],index=['三星','华为','苹果','OPPO','小米',"VIVO"])
phone_sales.name="2019Q2出货量"
print(phone_sales)
phone_sales_q1=pd.Series([2000,1900,1800,1700,1500],index=['苹果','OPPO','小米','三星','华为'])
print("="*40)
print(phone_sales_q1)
result=phone_sales+phone_sales_q1
result

两个数组相加会根据key自动对齐,VIVO一边有值一边没有值,结果是nan,看输出结果

 

缺失值处理

isnull() 是否是空值
notnull() 是否是非空


二、DataFrame 

列可以是不同的数据类型
大小可变
可对行列执行运算

创建

pd.DataFrame(data,index,columns,dtype)
index 行索引
columns 列索引
dtype  只能同时设置所有列的数据类型,如果想要每一列数据类型设置不同,可以单独给某一列进行设置

1、通过二维列表创建

sales=[
    [1,2,3],
    [5,6,7],
    [2,3,4],
]
df=pd.DataFrame(sales)
df=pd.DataFrame(sales,index=[行索引],columns=[列索引],dtype="int32")

df.info() 查看信息以及占用空间情况

2、通过字典创建DataFrame
pd.DataFrame(dict)

取值

先列后行
df['key1'] 获取key1列

 

切片

默认是列方向,不能直接对列进行切片。如果要对列切片,请参考下面的loc介绍。

df[2:4]这种写法是错误的,不支持直接的列切片。

 

花式索引

df[['key2','key4']] 获取其中2个列

df[[2,4]] 获取第2、第4个列

 

获取行

loc   通过索引
iloc  通过下表

准备数据如下:

roleInfo={
    "libai":{"name":"李白",'label':"刺客","sex":"男","money":18888},
    "diaochan":{"name":"貂蝉",'label':"法师","sex":"女",'money':13888},
    'bajie':{"name":"猪八戒",'label':"坦克",'sex':"猪",'money':18888},
    'change':{"name":"嫦娥",'label':"法师",'sex':"仙女",'money':0}
}
df=pd.DataFrame(roleInfo)
df=df.T
df

df.loc['libai']  通过索引获取行,获取libai那一行数据
df.loc['libai':'bajie']  行切片,获取libai到bajie三行的数据,包括右边边界索引


df.loc[['libai','diaochan']]  行花式索引,获取libai和diaochan两行数据


获取行和列

中间用逗号隔开[行规则,列规则],如果要保留所有直接用:冒号

df.loc['libai','name']  获取行李白和列name
df.loc[:,'label':"name"] 列切片


df.loc[['diaochan','change'],['name','money']] #行列花式索引

iloc 使用下标方式取值

df.iloc[0:3] 用下表方式进行切片的时候,不包括右边下标,左闭右开

df.iloc[0:3,0:3] 用下表对行和列切片


修改值

infos.loc['z']=[1,2,3,4] #对一行进行赋值
infos.log['a']=0 #整行一起赋值
infos['C']=100 #整列一起赋值

新增行和列

修改一个不存在的行或列,即为新增
infos['F']=80 新增一列
infos.loc['a']=120 新增一行

 

删除列和行

列删除
del infos['F'] 删除第F列
pop() 删除某列,并且返回该列的值
infos.pop('D')
行删除
df.drop() 可以删除多行,不会修改原数组,而是在返回的数组中删除了行
infos=infos.drop("a")
infos=infos.drop(["w","y"]) #删除多行
drop也可以删除列,删除多列
infos.drop(['A','B'],axis=1)
或者 infos.drop(['A','B'],axis='columns') 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值