Pandas
Pandas库的Serise、 DataFrame基础函数
pandas.Series
Series类型由一组数据及之相关的数据索引组成
Series类型可以由如下类型创建
python列表
标量值
python字典
ndarray
其他函数
s=pd.Series(25,index=['a','b','c','d']) #标量值
d=pd.Series({'a':10,'b':11,'c':12}) #字典类型
e=pd.Series({'a':10,'b':11,'e':12},index=['c','a','b','d']) #index构造Series,并选取字典的值
n=pd.Series(np.arange(10)) #ndarray
m=pd.Series(np.arange(5),index=np.arange(9,4,-1)) #ndarray+index
Series类型的操作
.index 获得索引
.values 获得数据
索引
b['b'] #序列索引
b[:3] #切片(切出来还是series类型)
'c' in b #判断'c'是否是索引只判断定义索引
b.get('f',100) #如果索引存在f,则返回values,不存在返回100
a+b #返回并集,返回相同index相加值
d.name #属性
d['c']=12 #直接修改数据
DataFrame类型
DataFrame是一个表格型的数据类型,每列值类型可以不同(多列,表格)
DataFrame既有行索引,也有列索引 index,columns
DataFrame常用于表达二维数据,但可以表达多维数据
DataFrame类型可以由下类型创建
二维ndarray对象
由一维ndarray、列表、字典、元组或Series构成的字典
Series类型
其他的DataFrame类型
#基础数据
dt={'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([9,8,7,6],index=['a','b','c','d'])}
d1={'one':[1,2,3,4],'two':[9,8,7,6]}
#生成DataFrame
d=pd.DataFrame(np.arange(10).reshape(2,5)) #ndarray
d=pd.DataFrame(dt) #字典
pd.DataFrame(dt,index=['b','c','d'],columns=['two','three']) #字典+标签
d=pd.DataFrame(d1,index=['a','b','c','d']) #字典+index
DataFrame数据操作
d.loc['c2'] #行index
d['one'] #列标签
d['one']['c'] #先列后行
d.loc['c']['one'] #先行后列
Series \DataFrame改变
重排:重新索引
**.reindex(index=None,columns=None,…) **
参数 说明
index,columns 新的行列自定义索引
fill_value 重新索引中,用于填充缺失位置的值
method 填充方法,ffill当前值向前填充,bfill向后填充
limit 最大填充量
copy 默认True生成新的对象,False时,新旧相等不复制
.reindex(index=['c','b','a','e','f']) 重新排列,按自定义index
.reindex(columns=['three','two','one']) 重新排列,自定义columns
.set_index(['a', 'b']) DataFrame可以通过set_index方法,可以设置单索引和复合索引。
填充列
df.fillna(0)
df.fillna({1:0, 2:0.5}) #对第一列nan值赋0,第二列赋值0.5
df.fillna(method='ffill') #在列方向上以前一个值作为值赋给NaN
新增列
d.columns.index(4,'新增') #在第4列增加列名为’新增‘的对象
d.reindex(colunns=newc,fill_value=200)
d['newcolumn']=value
删除Series 和DataFrame指定行或列索引
可以使用操作符: | 只需其中一个成立, & 同时成立, ~ 表示取反,它们要用括号括起来。
df.drop(labels=None,axis=0,index=None,columns=None,level=None,inplace=False,errors=‘raise’)
#删除条件行
df.drop(df[df['column']>100].index) #删除条件列
#可以使用操作符: | 或, & 且, ~ 非,例用括号括起来。
df = df.drop(df[(df.column < 50) & (df.column > 20)].index)
#删除列
df=df.drop(['参考月供'],axis=1) #指定axis=1删除列
#空值处理
df.dropna() #将所有含有nan项的row删除
df.dropna(axis=1,thresh=3) #将在列的方向上三个为NaN的项删除
df.dropna(how='ALL') #将全部项都是NaN的row删除,how='any'任意NaN的删除
#修改列值类型
df['column'] = df['column'].astype(np.int)
索引类型
.append(idx) #连接另一个index对象,产生新的index对象
.diff(idx) #计算差集,产生新的index对象
.intersection(idx) #计算交集
.union(idx) #计算并集
.delete(loc) #删除loc位置处的元素
.insert(loc,e) #在loc位置增加一个元素e
pandas 数据类型运算
索引相同才进行运算
补齐进缺项填充NaN
二维和一维,一维和0维间为广播运算
采用±*/符号进行的二元运算产生新的对象
a=pd.DataFrame(np.arange(12).reshape(3,4))
b=pd.DataFrame(np.arange(20).reshape(4,5))
a(±*/)b 补齐后运算,NaN不进行运算,并运算
方法形式的运算
.add(d,**argws) #加
.sub(d,**argws) #减
.mul(d,**argws) #乘
.div(d,**argws) #除
例:
b.add(a,fill_value=100) #NaN值用100替换
b.sub(a,fill_value=0) #NaN值用0填充
不同维度间计算
b-100 #广播运算
比较运算法则,同维度
比较运算只能比较相同索引的元素,不进行补齐
二维和一维、一维和零维间为广播运算
采用> < >= <= == != 等符号进行的二元运算产生布尔对象
pandas库的数据排序
1、.sort_index()方法在指定轴上根据索引进行排序,默认升序。
.sort_index(axis=0,ascending=True)
2、.sort_valuess()方法在指定轴上根据数值进行排序
.sort_values(by,axis=0,ascending=true)
3、Nan统一放到排序末尾
Series DataFrame 统计函数
.sum() 求和
.count() 统计
.mean() 平均值
.median() 中位数
.var() 方差
.std() 标准差
.min() 最小值
.max() 最大值
.cov() 协方差
.corr() person相关性
适用Series
.argmin() 最小值的索引位置自动索引
.argmax() 最大值索引位置
.idxmin() 自定义索引
.idxmax()
基本统计信息
.describe() #获取基本统计信息
s.describe()['count'] #提取基本统计信息内指定信息
s.describe()['max']
s[1].describe()
累计统计函数
.cumsum() 和
.cumprod()积
.commax() 最大值
.cummin() 最小值
滚动计算(窗口函数)
.roling(w).sum() 计算相邻W个元素的和
.roling(w).mean() 平均值
.roling(w).var() 方差
.roling(w).std() 标准差
.roling(w).min() 最小值
.roling(w).max() 最大值
删除重复值
df.duplicated() 重复项判断
df[df.duplicated()] 查看复复项
df.drop_duplicates(subset=None, keep=‘first’, inplace=False)
subset : column label or sequence of labels, optional
用来指定特定的列,默认所有列
keep : {‘first’, ‘last’, False}, default ‘first’
删除重复项并保留第一次出现的项
inplace : boolean, default False
是直接在原来数据上修改还是保留一个副本
删除列a,b重复行
df.drop_duplicates(subset=[‘a’,‘b’],inplace=True]
删除索引(index_col)的重复值
df=df[~df.index.duplicated()]