pandas(一) Series和DataFrame

之前介绍的Numpy适合处理同质型的数值类数组数据,而pandas是用来处理表格型或者异质性数据。这篇博文主要是来简要介绍pandas的两个常用的工具数据结构:Series和DataFrame。

文章目录

Series

  1. Series是一维的数组型对象,包含一个值序列,并且包含了数组标签,称为索引。
  2. 可以被认为是一个长度固定且有序的字典。
  3. pandas中标记缺失值或NA值的方式:NAN

首先介绍生成Series的三种常用方式:

import pandas as pd
from pandas import Series,DataFrame
import numpy as np
#默认生成的索引是从0到N-1(N是数据的长度)
obj1 = pd.Series([4,5,6,7])
obj1
#index是索引序列
obj2 = pd.Series([4,5,-6,-7],index=["a","b","c","d"])
obj2
#可以使用字典生成Series
data = {"tom":11,"sam":20,"beryl":13,"daniel":14,"shally":23}
obj3 = pd.Series(data)
obj3

Out:

0    4
1    5
2    6
3    7
dtype: int64

a    4
b    5
c   -6
d   -7
dtype: int64

tom       11
sam       20
beryl     13
daniel    14
shally    23
dtype: int64

然后,来介绍Series的几个属性

#获得Series对象的值和索引
obj1.values
obj1.index

#Series对象自身和其索引都有name属性
obj3.name = "People"
obj3.index.name = "NAME"
obj3

Out:

array([4, 5, 6, 7], dtype=int64)
RangeIndex(start=0, stop=4, step=1)

NAME
tom       11
sam       20
beryl     13
daniel    14
shally    23
Name: People, dtype: int64

最后,来介绍Series一个非常有用的特性:自动对齐索引

obj3
obj4
obj3 + obj4

Out:

tom       11
sam       20
beryl     13
daniel    14
shally    23
dtype: int64

beryl     13.0
daniel    14.0
d00        NaN
tom       11.0
shally    23.0
sam       20.0
dtype: float64

beryl     26.0
d00        NaN
daniel    28.0
sam       40.0
shally    46.0
tom       22.0
dtype: float64

DataFrame

DataFrame表示矩阵的数据表,每列可以是不同的值类型,被视为共享共同索引的Series的字典。
首先介绍DataFrame对象的生成

#创建DataFrame,利用包含等长度列表或Numpy数组的字典
data = {"province":["Henan","Hubei","Hunan","Guangdong","Sichuan"],
        "year":[2000,2020,2030,2040,2050],
        "city":["Nanyang","Wuhan","Changsha","Zhuhai","Yaan"]
       }
frame = pd.DataFrame(data)
frame

Out:

province 	year 	city
0 	Henan 	2000 	Nanyang
1 	Hubei 	2020 	Wuhan
2 	Hunan 	2030 	Changsha
3 	Guangdong 	2040 	Zhuhai
4 	Sichuan 	2050 	Yaan
#若传的列不在字典里,将会在结果中出现缺失值
frame2 = pd.DataFrame(data,columns=["city","province","year","debt"],index=["a","b","c","d","e"])
frame2

Out:

city 	province 	year 	debt
a 	Nanyang 	Henan 	2000 	NaN
b 	Wuhan 	Hubei 	2020 	NaN
c 	Changsha 	Hunan 	2030 	NaN
d 	Zhuhai 	Guangdong 	2040 	NaN
e 	Yaan 	Sichuan 	2050 	NaN

嵌套字典被赋值给DataFrame,pandas会将字典的键作为列,将内部字典的键作为行索引。

fm = {"Nanyang":{"province":"Henan","year":2000,"debt":10},
      "Wuhan":{"province":"Hubei","year":2020}}
frame3 = pd.DataFrame(fm)
frame3

Out:

 	            Nanyang 	Wuhan
debt 	    10        	NaN
province 	Henan 	Hubei
year 	    2000 	    2020

然后介绍DataFrame对象的属性和方法

#只会选出头部的五行
frame.head()
#如果指定了顺序,会按照顺序进行排列
pd.DataFrame(data,columns=["city","province","year"])

Out:

province 	year 	city
0 	Henan 	2000 	Nanyang
1 	Hubei 	2020 	Wuhan
2 	Hunan 	2030 	Changsha
3 	Guangdong 	2040 	Zhuhai
4 	Sichuan 	2050 	Yaan

	city 	province 	year
0 	Nanyang 	Henan 	2000
1 	Wuhan 	Hubei 	2020
2 	Changsha 	Hunan 	2030
3 	Zhuhai 	Guangdong 	2040
4 	Yaan 	Sichuan 	2050
frame2.columns

Out:

Index(['city', 'province', 'year', 'debt'], dtype='object')

最后介绍DataFrame的索引对象。
pandas中的索引对象是用于存储轴标签和其他元数据的(例如轴名称,标签),任何数组或标签序列都可以在内部转换为索引对象。

obj = pd.Series(range(3),index=["a","b","c"])
index= obj.index
index[1:]

Out:

Index(['b', 'c'], dtype='object')
  1. 索引对象是不可变的,用户不可修改,所以index[1] = "e"这种代码是一定会报错的。
  2. 与python集合不同,pandas索引对象可以包含重复标签。
labels0 = pd.Index(["a","a","b","c"])
labels0

Out:

Index(['a', 'a', 'b', 'c'], dtype='object')
  1. 索引对象的属性和方法也比较多,在这里列出来一部分供大家查阅
#labels和labels0是两个索引对象
labels.append(labels0)#将新的索引对象粘贴到原索引后,产生一个的新的索引对象
labels.difference(labels0)#计算两个索引对象的差集
labels.intersection(labels0)#计算两个索引对象的交集
labels.union(labels)#计算两个索引对象的并集
labels.isin([1,2])#计算每一个值是否在传值容器中的布尔数组
labels.delete(0)#删除位置i的元素,并且产生新的索引
labels.drop(1)#根据传参删除指定索引值,并产生新的索引
labels.insert(3,4)#在位置i插入元素,并产生新的索引
labels.is_monotonic#如果索引序列递增则返回True
labels.is_unique#如果索引序列唯一则返回true
labels.unique()#计算索引的唯一值序列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值