导包
import numpy as np
import pandas as pd
Pandas中三大数据结构:Series、DataFrame、Index
Series
data = pd.Series([0.25,0.5,0.75,1.0])
data
返回Series的值
data.values
返回Series的索引对象
data.index
操作时,1、可以把Series当成Numpy的数组来操作
data[1]
data[1:3]
Series定义时,可以自己指定索引。
data = pd.Series([0.25, 0.5 , 0.75, 1.0 ],index=['a','b','c','d'])
data
获取数据
data['b']
2、可以把Series当成一个特殊的字典
population_dict = {'Texas':26448193,'New York':19651127,'Florida':19552860,'Illinois':12882135,'Californis':38332521}
population = pd.Series(population_dict)
population
可以像访问字典一样访问
population['Californis']
Series 比字典强大,支持数组形式的操作
population["New York":'Californis']
创建Series对象
基本形式:pd.Series(data,index=index),index是可选参数
1、 data 可以是列表或numpy数组
pd.Series([2,4,6])
2、data 可以是一个标量。创建时,会被重复填充到各个索引上
pd.Series(5,index=[100,200,300])
3、data 可以是一个字典
pd.Series({'a':1,'b':2,'c':3})
每一种创建形式,都可以通过指定索引,筛选需要的结果
pd.Series({'a':1,'b':2,'c':3},index=['a','c'])
DataFrame 对象
1、将DataFrame当成Numpy数组操作
area_dict = {'Texas':695662 ,'New York':141297, 'Florida':170302, 'Illinois':149995, 'Californis':423976}
area = pd.Series(area_dict)
states = pd.DataFrame({'population':population,'area':area})
states
获取DataFrame的行索引对象
states.index
获取DataFrame的列索引对象
states.columns
默认按列获取数据
states['population']
可以将dataframe当成字典
states['population']
创建DataFrame对象
1、通过Series创建
pd.DataFrame(population,columns=['population']) # columns用来指定列的索引名称
2、通过字典列表创建
data = [{'a':i ,'b': 2 *i} for i in range(3)]
pd.DataFrame(data)
如果字典中有些键不存在,Pandas会用缺失值NaN来表示
pd.DataFrame([{'a':1,'b':2},{'b':3,'c':4}])
3、通过Series对象字典创建
pd.DataFrame({'population':population,'area':area})
4、通过Numpy的二位数组创建
pd.DataFrame(np.random.rand(3,2),columns=['foo','bar'],index=['a','b','c'])
5、从Numpy的结构化数组创建
A = np.zeros(3,dtype=[('A','i8'),('B','f8')])
A
pd.DataFrame(A)
使用Pandas创建Index对象
使用列表创建
ind = pd.Index([2,3,5,7,11])
ind
1、将Index看作不可变的数组
ind[1]
ind[::2]
Index 对象拥有与Numpy数组相似的属性
print(ind.size, ind.shape, ind.ndim, ind.dtype)
注意,Index对象是不可变的,这样使多个Series或DataFrame之间共享数据更加安全。
2、将Index看作有序的集合
indA = pd.Index([1,3,5,7,9])
indB = pd.Index([2,3,5,7,11])
indA & indB #交集
indA | indB #并集
indA ^ indB #异或
Int64Index([1, 2, 9, 11], dtype='int64')
数据的取值与选择
Series 数据选择的方法
1、将Series看作字典
data = pd.Series([0.25,0.5,0.75,1],index=['a','b','c','d'])
通过键取值
data['c']
判断键a是否存在
'a' in data
获取所有的键
data.keys()
调用items()方法
list(data.items())
动态的添加数据
data['e'] = 1.25
data
2、将Series当作一维数组
Series拥有和Numpy数组一样的功能,包括:索引、切片、掩码、花哨索引
将显式索引作为切片
data['a':'c']
将隐式索引作为切片
data[1:3]
注意:显式索引选择时,包括最后一个索引。隐式索引则不包括。
掩码操作
data[(data > 0.3) & (data < 0.8)]
花式索引
data[['a','e']]
3、索引器 loc 、 iloc 和 ix
data = pd.Series(['a','b','c'], index=[1,3,5])
data
取值操作使用的是显式索引
data[1]
切片操作,使用的是隐式索引
data[1:3]
loc 表示使用显示索引
data.loc[1]
data.loc[1:3]
iloc 表示使用的是隐式索引
data.iloc[1]
data.iloc[1:3]
将DataFrame 看作字典
通过键访问DataFrame,注意选取的数据都是列数据
data['area']
data.area
增加一列
data['density'] = data['pop'] / data['area']
data# 将DataFrame 看作二维数组
按行查看数组数据
data.values
转置操作
data.T
获取一行数据
data.values[0]
获取列
data['area']
使用索引器来取值,可以将DataFrame当作二维数组进行操作
data
使用隐式索引操作
data.iloc[:3,:2]
使用显式索引操作
data.loc[:'Florida',:'pop']
ix 索引器,可以将隐式索引和显式索引混合使用
data.ix[:'Florida',:2]
任何用于处理Numpy形式数据的方法,都可以用于这些索引器。比如:掩码、花式索引
data.loc[data.density > 100,['pop','density']]
任何用于处理Numpy形式数据的方法,都可以用于这些索引器。比如:掩码、花式索引
data.loc[data.density > 100,['pop','density']]
任何一种取值方法,都可以用于调整数据。
data.iloc[0,2] = 90
data
其他一些选值操作
对单个标签取值,选择的是列
data['area']
对多个标签用切片操作,就是选择行
data["Texas":"Illinois"]
切片也可以直接用行数实现(隐式索引编号)
data[1:3]
掩码操作,可以直接对一行过滤
data[data.density > 100]