类似于一维数组的对象,或看成一个定长的有序字典由一组数据及其数据标签组成
自动为数据创建一个0~N-1的整数型索引
obj = Series([4,7,5,3])
0 4
1 7
2 5
3 3
dtype: int64
>>> obj.values # 获取值(数组array(Numpy)表现形式)
>>> obj.index # 获取索引
obj2 = Series([4,7,5,3], index=['a','b','c','d'])
a 4
b 7
c 5
d 3
dtype: int64
# 通过索引的方式选取Series中的单个或一组值
>>> obj2['a']
>>> obj2[['a','b','c']]
# 使用字典直接创建Series
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = Series(sdata)
obj4 = Series(sdata, index = states) # sdata中与states索引相匹配的值会被找出来并放到相应位置
# 检测是否缺失数据
pd.isnull(obj)
pd.notnull(obj)
# 数据对其功能:自动对齐不同索引的数据
>>> obj3 + obj4
# obj3和obj4的索引的顺序不一致,可以直接加,对其不同索引的数据
# 索引和数据都有name属性
>>> obj4.name = 'population'
>>> obj4.index.name = 'states'
是一个表格型的数据结构,DataFrame既有行索引也有列索引
自动加索引
# 传入由等长列表或Numpy数组组成的字典
>>> frame = DataFrame(data)
# 指定列序列,决定列的顺序;指定行标签
>>> DataFrame(data, columns = ['year', 'state', 'pop'], index = ['one', 'two', 'three', 'four', 'five'])
# 将DataFrame的列获取为一个Series:类似字典的标记方式/属性的方式
>>> frame2['state'] / frame2.state # 返回的Series拥有相同的索引,且其name属性也已被设置好了
# 将DataFrame的行获取为一个Series:.ix->已被更改为.loc(lable based)/.iloc(index based)
>>> frame2.ix['three'] / frame2.iloc[3] / frame2.loc['three']
# 列可以通过赋值的方式修改
>>> frame2['debt'] = np.arange(5)
>>> frame2['debt'] = 某一个Series # 自动对齐index
# del 用于删除列
>>> del frame['debt']
# 设置index和columns的name属性
>>> frame3.index.name = 'xxx'
>>> frame3.columns.name = 'xxx'
# 嵌套的字典:外层作为列,内层作为索引
# 可以输入给DataFrame构造器的数据
1. 二维ndarray #数据矩阵,还可以传入行标或列标
2. 由数组、列表、元组组成的字典 #每个序列会变成DataFrame的一列,所有序列的长度必须相同
3. Numpy的结构化/记录数组 #由数组组成的字典
4. 由Series组成的字典 #每个Series会组成一列,默认各Series的索引会被合并成结果的行索引
5. 由字典组成的字典 #外层作为列,内层作为索引,索引会合并
6. 字典或Series的列表 #各项将成为DataFrame的一行,字典的键和Series的索引会成为DataFrame的列标
7. 由列表或元素组成的列表 #类似于二维ndarray
8. 另一个DataFrame # 该DataFrame的索引将被沿用
9. Numpy的MaskedArray #类似于二维ndarray
Pandas 的索引对象负责管理轴(行)标签和其他元数据
frame3.index
frame3.index[1:]
frame3.index[1] = 'xxx' #错误,index不可修改
# pandas中主要的index对象
index #最泛化的index对象,
Int64Index
MultiIndex
DatetimeIndex
PeriodIndex
index的方法和属性
append # 连接另一个Index对象,产生一个新的Index
diff #计算差集,并得到一个index
intersection #计算交集
union #计算并集
isin #索引是否在所给函数的参数内
delete #删除索引i处的元素,并得到新的index
drop #删除传入的值,
insert #将元素插入到索引i处
is_monotonic #当各元素均大于等于前一个元素时,返回True
is_unique #当Index没有重复值时,返回True
unique #计算index中唯一值的数组
将原有的索引的顺序,按新的指定的顺序“重新索引”
需要一些插值处理:method选项
ffill/pad #前向填充(或搬运)值
bfill/backfill #后向填充(或搬运)值
frame2.reindex(index=['a', 'b', 'c','d'], columns=['one', 'two', 'three'])
# 会向frame2查找相同索引名、相同列名的数据,找不到为NaN,不是简单的覆盖原名称
#插值只能按行应用(轴0)
# reindex函数的参数
index # 用作索引的新序列
method #插值填充的方式
fill_value #在重新索引的过程中,需要引入缺失值时使用的替代值
limit #前向或后向填充时的最大填充量
level #在MultiIndex的指定级别上匹配简单索引
copy #默认为True,无论如何都复制,False:新旧不相等时复制
drop方法返回的时一个在指定轴上删除了指定值的新对象
Series:
>>> new_obj = obj.drop('c')/obj.drop(['c','d'])
DataFrame:
>>> frame.drop('a')/([x,x,x])
>>> frame.drop('Ohio', axis = 1)
Series的索引值不只是整数,可以是索引名,可以是一个列表
切片:Series末端是闭区间
DataFrame的索引值不能是整数,可以是索引名(列名,或.loc[行名]),可以是一个列表
切片:DataFrame的切片时从行上进行的,末端是开区间
DataFrame的索引选项
**根据.iloc和.loc修改**
obj[val] #选取某列
obj.ix[val],obj.loc['x'],obj.iloc[val]
#选取某行
obj.ix[:, val] #选取单个列或子集
obj.ix[val1, val2] #同时选取行和列
reindex方法 #将一个或多个轴匹配到新索引
xs方法 #根据标签选取单行或单列,并返回一个Series
icol,irow方法 #根据整数位置选取单行或单列,并返回一个Series
at(frame.at[4, 'B']),iat方法
#根据行标签和列表前选取单个值
###
loc中,所有的参数都是‘xxx'
iloc中,所有的参数都是数字
切片就切片,不用在切片的外面再套[x:x]:data.iloc[0:2,[0,1]]
对不同索引的对象进行算术运算,对DataFrame言,对齐操作会同时发生在行和列上
如果存在不同的索引对时,结果的索引就是该索引的并集,在不重叠的索引处引入了NA值,缺失值会在算术运算中传播
在对齐过程中找不到值时填充一个特殊值(比如0)
灵活的算术方法
add()
sub()
div()
mul()
>>> df1.add(df2, fill_value=0)
- 默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播
- 如果希望匹配行且在列上广播,必须使用算术运算方法:frame.sub(series3,axis=0),传入的轴号时希望匹配的轴
#将函数应用到每一个函数:
Numpy的元素级数组方法 np.abs(frame)
applymap方法 frame.applymap(f)
#将函数应用到行或列的一维数组:
DataFrame的apply方法 frame.apply(fun, axis=x)(#把axis想成返回的结果的索引的轴)
sort_index() #按索引对Series排列
sort_index(axis=x, ascending = True/False)方法
#按索引对DataFrame某行或某列进行排序(按字典顺序)
order()方法 #按值对Series排序,缺失值会被放到Series的末尾
sort_values(by='x') #DataFrame中按某列的顺序进行排列
排名:在原有的数据的位置上给出排名
obj.rank(ascending = , method = 'x')
# 破坏平级关系的method选项
average #默认,在相等分组中,为各个值分配平均排名
min #使用整个分组的最小排名
max #使用整个分组的最大排名
first #按值在原始数据中的出现顺序分配排名
# 约简方法的常用选项
axis #约简的轴:行为0,列为1;默认为0
skipna #排除缺失值,默认为True
level #如果轴是层次化索引的,则根据level分组约简
# 描述和汇总统计
count #非NA值的数量
describe #针对Series或各DataFrame列计算汇总统计
min\max
argmin\argmax #最大、最小值的索引的位置
idxmin\idxmax #最大、最小值的索引的值
quantile #计算样本的分位数
sum\mean
median
mad #根据平均值计算绝对离差
var\std
skew\kurt #偏度(三阶矩)、峰度(四阶矩)
cumsum\cumprod
cummin\cummax
diff #一阶差分
pct_change #计算百分数变化
Series.corr(Series) #Series的corr、cov方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关性:
DataFrame.corr #DataFrame的corr、cov方法将以DataFrame的形式返回完整的相关性:
DataFrame.corrwith(Series/DataFrame):(axis是一个参数)
Series.unique() #返回唯一值的数组(array)
Series.value_counts() #计算一个Series中各值出现的频率**索引是唯一值,值为频率**
Series.isin(['x','x']) #“Series各值是否包含于传入的参数中”的布尔型数组
pandas利用Numpy的NaNcy表示缺失数据
# NA处理方法
dropna #滤除缺失数据,课通过阈值调节对缺失值的容忍度
fillna #用指定值或指定方法填充缺失数据
isnull #判断是否是NA值的布尔对象,类型与原类型一致
notnull #isnull的否定式
Series:
dropna() #返回一个仅含非空数据和索引值的Series
data[data.notnull()]
DataFrame: 希望丢弃全NA的行或列,含有NA的行或列
dropna(): 默认丢弃任何含有NA的行
dropna(how='all', axis=1): 丢弃全为NA的列
dropna(thresh=x): 每行NA值个数大于thresh才删除
df.fillna(0)
df.fillna({1:0.5, 3:-1}) #通过一个字典调用fillna,可以实现对不同的列填充不同的值
df.fillna(inplace=True) #对现有对象就地修改
# 对index有效的插值方法也可用于fillna
# fillna函数的参数
value #填充缺失值的标量值或字典对象
method #插值方式,默认ffill
axis #轴
inplace #直接修改调用者
limit #可以连续填充的最大数量
在一个轴上拥有多个索引级别:以低维度形式处理高纬度数据
层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演重要的角色。
frame.swaplevel('xxx','xxx') #交换名称的索引层级(xxx是索引的names)
frame.sortlevel(1) #
指定索引级别,进行汇总统计操作
利用了pandas的groupby功能
frame.sum(level='xxx',axis=x) #在指定的索引名称的级别上汇总统计
将DataFrame的一个或多个列当作行索引来用,或者将行索引变成DataFrame的列
frame.set_index('xxx',drop = False) #默认这些列会从DataFrame中移除,但也可以将其保留下来
frame.reset_index() #层次化索引的级别会被转移到列里面