【pandas】数据分析

pandas数据分析

   适用于金融分析

  • 基本数据结构
对象类型含义用途
DataFrame二维数据对象组织的表格数据
Series一维数据对象单一(时间)数据序列

 Series相当于是特殊的DataFrame数据


  • DataFrame类

import pandas as pd		#导入pandas
df = pd.DataFrame([10,20,30,40],		
columns=['numbers'],index=['a','b','c','d'])	#定义列表形式的数据
print(df)
输出
		numbers
	a	  10	
	b     20
	c     30 
	d     40
  • df.index 可以查看index属性和index对象
  • df.columns 查看columns属性和index对象
  • df.loc[‘index’] 选择对应着索引为index的值
  • df.loc[‘id1’,‘id2’] 选择对应索引id1,id2的两个值
  • df.iloc[1:3] 输出第二和第三行的值,注意是左闭右开的区间
  • df.sum() 计算单列总和
  • df.apply(lambda x:x ** 2) 计算每一个索引对应的平方值
  • df ** 2 也是求平方
  • 与Numpy对象不同的是,我们可以在两个维度上同时扩增DataFrame对象
    • 例如:df[‘floats’] = (1.5,2.5,3.5,4.5)
_numbersfloats
a01.5
b202.5
c303.5
d404.5
 - 也可以使用整个DataFrame对象来定义一个**新列**,此时,索引会自动对齐
df['name']=pd.DataFrame(['Sandra','Lilli','Henry'],index=['d','a','b','c'])
# 以下例子可以避免索引被简单的索引代替
# 顺序索引:如果已存在的有123,那么这里就是4
df.append({'numbers':100,'floats':5.75,'names':'Jil'},ignore_index=True)
# 这里就可以自定义新的索引为y
df=df.append(pd.DataFrame({'numbers':100,'floats':5.75,'names':'Jil'},index=['y',]))
# 返回各列的dtype
print(df.dtypes)
#分别求两列均值(忽略带NaN的行)
df[['numbers','floats']].mean()
#分别求两列的标准差(忽略带NaN的行)
df[['numbers','floats']].std()
  • 用ndarray对象创建DataFrame对象
df = pd.DataFrame(ndarray)
  • 为了高效处理金融时间序列数据,pandas可以很好地处理时间索引成为优势
dates = pd.date_range('2019-1-1',periods=9,freq='M')
data_range()函数的参数
参数格式描述
start字符串起始日期
end终止日期
periods整数/None期数
freq日期偏移频率字符串,例如5D(5天)
关于更多的date_range()中freq的选项详情见书p117页

基本分析

  • df.info() 提供关于数据、列和索引的元信息
  • df.describe() 提供有用的每列汇总统计(对于数值数据)信息
df.sum()	#列求和
df.mean()  	#列均值
df.mean(axis=0) 	#列均值
df.mean(axi=1)	#行均值
df.cumsum()		#列累计总和(从第一个索引位置起依次累加)

基本可视化

DataFrame对象的折线图
from pylab import plt,mpl
plt.style.use('seaborn')#以上两步均是为了确定绘图样式
mpl.rcParams['font.family']='serif'
%matplotlib inline
# 绘制4列累计总和的折线图
df.cumsum().plot(lw=2.0,figsize=(10,6))

pandas提供了专为DataFrame对象设计的matplotlib包装器
plot()参数详见p123

df.plot.bar(figsize=(10,6),rot=15)	#绘制柱状图

Series类

Series是pandas自带的类
特点是仅有一列数据
从多列的DataFrame对象上选取一列,可以得到Series对象

#相当于设置格式:范围为0-15,均分成7份,index默认从0开始
S=pd.Series(np.linspace(0,15,7),name='series')
GroupBy操作

pandas具备强大灵活的分组功能
为了分组,现添加1列

df['Quarter'] = ['Q1','Q2','Q1']
这一操作产生的结果是多了一列Quarters的值为Q1,Q2,Q1
groups=df.groupby('Quarter')	#根据Quarter那列分组
groups.size()	#给出每种分组的个数,例如上面有2个Q1,1个Q2
groups.mean()	#每列均值	
groups.max()	#每列最大值
groups.aggregate([min,max]).round(2)	#每列的最小值和最大值

另外,分组也可以在多列上面进行。


以上均为对于pandas和Dataframe对象使用的介绍。
以下是应用。


【1】复杂选择

#生成符合标准正态分布随机数的ndarray对象
data=np.random.standard_normal((10,2))
#包含相同随机数的DataFrame对象
df=pd.DataFrame(data,columns=['x','y'])
df.info()
#取得前5行
df.head()
#取最后5行
df.tail()
  • Python比较运算符和逻辑运算符在两列值上的应用
df['x'] > 0.5	#检查x列的值是否大于0.5
(df['x'] > 0) & (df['y'] < 0)#检查是否x列大于0且y列为负
df['x'] > 0 | (df['y'] < 0)#检查是否x列大于0或y列为负
df > 0 #DataFrame对象中哪些值为正
df[df>0]	#选择所有满足df>0的值,且将剩下的值设为NaN

【2】联接、连接和合并

df1=pd.dataframe([...],index=['x','...'],columns=['A',])
df2=...
df1.append(df2,sort=False)#直接复制df2的索引
df1.append(df2,ignore_index=True,sort=False)#接着df1的索引
#df1的索引值有意义——只有第一个DataFrame对象的索引值被使用
df1.join(df2)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值