一、Series
- 利用列表创建Series
obj = Series([4,7,-5,3],index = ['d','b','a','c'])
- 利用字典创建Series:键为索引
- 利用values和index属性获取值和索引
obj.values
obj.index
- 对Series进行Numpy数组运算,都会保留索引和值之间的链接
'b' in obj
#检测缺失数据
pd.isnull()
pd.notnull()
#Series的方法
obj.isnull()
obj.notnull()
- Series在算术运算中会自动对齐不同索引的数据
- Series对象本身及其索引都有一个name属性
obj.name = 'adj'
obj.index.name = 'state'
#Series的索引可以通过赋值的方式就地修改
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
二、DataFrame
构建方法:
- 直接传入一个由等长列表或NumPy数组组成的字典,每一列是一个键值对
frame2 = DataFrame(data,columns = ['year','state','pop','debt'],index = ['one', 'two','three','four','five'])
#data是一个字典
frame2.columns
- 通过类似字典标记或属性的方式,可以将DataFrame的列获取为一个Series
frame2['state']
frame2.year
- 列可以通过赋值的方式进行修改;也可以用Series对DataFrame进行赋值,索引会精确匹配,而所有空位将被填上缺失值
- 关键字del用于删除列;属性
del frame2['eastern']
frame2.T #转置
frame3.index.name
frame3.columns.name
frame3.values
- 嵌套字典:外层字典的键作为列,内层键则作为行索引
- 索引对象;index对象是不可修改的
obj.index
index = pd.Index(np.arange(3))
- index的方法和属性:
- append
- diff:计算差集
- intersection
- union
- isin
- delete
- drop
- insert
- is_monotonic
- is_unique
- unique
- 重新索引
s1.reindex(索引列表,fill_value = ..,method = 'ffill'/'bfill') #Series重新索引
d1.reindex(index = ['a','b','c','d',method = 'ffill',columns = ...) #重新索引行、列
frame.ix[['a','b','c','d'],list1]
- 丢弃指定轴上的项
new_obj = obj.drop('d','c'] #返回一个新对象
- 索引、选取和过滤
利用标签的切片运算和普通的Python切片运算不同,其末端是包含的
obj['b':'c']
data.ix[:,'b']
DataFrame的索引选项:
- obj[val]:选取dataframe的单个列或一组列
- obj.ix[val]:选取dataframe的单个行或一组行
- obj.ix[:,val]:选取单个列或列子集
- obj.ix[val1,val2]:同时选取行和列
- reindex方法:将一个或多个轴匹配到新索引
- xs方法:根据标签选取单行或单列,并返回一个Series
- icol、irow方法:根据证书位置选取单列或单行,并返回一个Series
- get_value、set_value方法:根据行标签和列标签选取单个值
- 算术运算和数据对齐
- 在算术方法中填充值
df1+df2
df1.add/sub/div/mul(df2,fill_value=0)
- DataFrame和Series之间的运算
默认情况下,dataframe和series之间的算术运算会将series的索引匹配到dataframe的列,然后沿着行一直向下广播;如果你希望匹配行且在列上广播,则必须使用算术运算方法。eg:frame.sub(series,axis=0),传入的轴号就是希望匹配的轴。
- 函数应用和映射
Numpy的ufuncs(元素级数组方法)也可用于操作pandas对象
np.abs(frame)
另一个常见的操作是,将函数应用到各列或行所形成的的一维数组上。DataFrame的apply方法即可实现此功能。
f = lambda x: x.max() - x.min()
frame.apply(x)
- 排序和排名
对行或列索引进行排序,可用sort_index方法,返回一个新对象
若要按值对Series进行排序,可使用其order方法
若要按列值对Dataframe进行排序,将列名传递给by参数即可
DataFrame可以在行或列上计算排名 df.rank()
- 带有重复值的轴索引
obj.index.is_unique
- 汇总和计算描述统计
df.sum()
df.sum(axis=1) #NA值会自动被排除,或用skipna=FALSE。axis代表约简的轴
df.idmax() #返回的是间接统计(达到最大值的索引)
df.cumsum() #累计型
df.describe() #一次性产生多个汇总统计
描述统计相关方法:
- count
- describe
- min, max
- argmin, argmax:计算能够获取到最小值和最大值的索引位置(整数)
- idxmax, idxmin:计算能够获取到最小值和最大值的索引值
- quantile:计算样本的分位数
- sum
- mean
- median
- mad
- var
- std
- skew
- kurt
- cumsum
- cummin, cummax
- cumprod:累计积
- diff:一阶差分
- pct_change:计算百分数变化
- 相关系数与协方差
Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数;与此类似,cov用于计算协方差:
df1.col1.corr(df1.col2)
DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵
df1.corr()
df1.corrwith(df2.col1)
- 唯一值、值计数以及成员资格
unique1 = s1.unique().sort()
- s1.value_counts() #value_counts()用于计算一个Series中各值出现的频率
#value还是一个顶级的pandas方法,可用于任何数组和序列
pd.value_counts(obj.values, sort=False)
s1.isin(['b','c'])
result = data.apply(pd.value_counts).fillna(0)
- 处理缺失数据
pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据
string_data.isnull()
NA处理方法:
dropna:根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度
fillna, isnull, notnull
- 滤除缺失数据
s1.dropna() #对于一个Series,dropna返回一个仅含非空数据和索引值的Series
df1.dropna(axis=...) #对于一个DataFrame,dropna默认丢弃任何含有缺失值的行
- 填充缺失数据
df.fillna(0) #fillna默认返回新对象
df.fillna({1:0.5,3:-1) #通过字典调用fillna,实现对不同的列填充不同的值
- 层次化索引--在一个轴上拥有多个索引级别
层次化索引在数据重塑和基于分组的操作中很重要
df1.unstack()
df1.unstack().stack()
df1.index.names =
df1.columns.names =
MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],names = ['state','color']) #可以单独创建MultiIndex然后复用
- 重排分级顺序
df1.swaplevel('key1','key2') #重新调整某条轴上各级别的顺序
df1.sortlevel(1) #根据单个级别中的值对数据进行排序
- 根据级别汇总统计
frame.sum(leve = 'color', axis = 1) #level用于指定在某条轴上求和的级别
- 使用DataFrame的列
frame2 = frame.set_index(['c','d']) #将其一个或多个列转换为行索引,并创建一个新的 DataFrame
frame.reset_index() #reset_index:层次化索引的级别会被转移到列里面