DataFrame使用笔记
dates=pd.date_range('20160728',periods=6) #创建固定频度的时间序列
df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) #创建6*4的随机数,索引,列名称。
df2=pd.DataFrame({'A':pd.Timestamp('20160728'),'B':pd.Series(1)})#字典创建Dataframe,假如字典的数据长度不同,以最长的数据为准。
df2.dtypes #查看各行的数据格式
df2.head()  df2.tail(5) #查看前、后几列
df.columns  df.value #查看列名、value
df.describe() #查看描述性的统计,比如每一列的count、mean、std...
df.T  df.sort(columns='C') #转秩、排序
df['A']   df[1:3]#选择A列数据,选择1-2行数据,切片操作得到的是行数据。
df.loc[:,['A','B']] #选择多列数据
df.loc['20160728':'20160730',['A','B']] #选择局部区域
df.at[dates[0],'A'] #选择某个值
df.iloc[3]  df.iloc[1,1]#提取第四行数据,取第2行第2列的这个数
df.iloc[3:5,0:2] #像array一样切片操作
df.iloc[[1,2,4],[0,2]] #提取不连续的行和列
df.iat[1,1]#专门取某个数,效率比较高
df[(df.D>0)&(df.C<0)] #选择D列数据大于0的行
df[['A','B']][(df.D>0)&(df.C<0)]#选择D列数据大于0的行,只返回A,B两列
df['D'].isin(alist)#alist是一个预先定义的列表,把要筛选的值写到列表中,查找D数据中含有alist的值
os.getcwd()#获得当前的工作目录
df=pd.read_csv('',encoding='gbk',sep=',')#读取csv文件
counts=df[u'专业名称'].value_counts() #计数统计
plt=counts.plot(kind='bar').get_figure()
plt.savefig('d/plot.png')  #画图
good=df[df[u'高考分数']>520] #筛选
good_counts=good[u'专业名称'].value_counts()
per=good_counts/counts #计算百分比,直接利用矩阵的除法
df.groupby('A').first() #按A列分组,输出每一组的第一行数据
df.groupby(['A','B']) #按两列分组
#创建函数,作为分组标准。 下例:如果列名是abem中的之一,就分为组别v反之为w
def get_type(letter):if letter.lower() in 'abem':return 'v'else:return 'w'
grouped=df.groupby(get_type,axis=1)import pandas.util.testing as tm
colors=tm.choice(['red','green'],size=10)
foods=tm.choice(['eggs','ham'],size=10) #随机创建两个数组
index=pd.MultiIndex.from.arrays([colors,foods],names=['color','food'])  #创建MultiIndex对象,然后创建DataFrame对象
df.pd.DataFrame(np.random.randn(10,2),index=index)
print df.query('color=="red"') #查询
grouped=df.groupby(level='food')#在分组中使用索引
df.index.names=[None,None]
print df.query('ilevel_0=="red"')#删除了索引名称,只能使用ilevel_0表示第一个索引
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
grouped=df.groupby(level=1)
grouped.aggregate(np.sum) #计算各组的总和
print grouped.aggregate(np.sum).reset_index()#将索引转化为列向量
df.groupby(level=['color'],as_index=False).sum()#能达到一样的效果
print grouped.size()#返回每个组的数据量
print grouped.discribe()#返回各组数据的描述性信息
#transformation标准化数据
import pandas as pd
import numpy as np
index=pd.date_range('20140101',periods=100)
ts=pd.Series(np.random.normal(0.5,2,100),index)
print ts.head()
key=lambda x:x.month
zscore=lambda x:(x-x.mean())/x.std()
transformed=ts.groupby(key).transform(zscore)
print type(transformed)
print transformed.groupby(key).mean()
print transformed.groupby(key).std()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
#使用agg
grouped=df.groupby(level='color').agg(['SUM':np.sum,'MEAN':np.mean,'STD':np.std])
#通过lambda匿名函数来进行特殊计算
print grouped['a'].agg({'lambda':lambda x:np.mean(abs(x))})
  • 1
  • 2
  • 3
  • 4
#按月分组
key =lambda x:x.month
grouped=ts.groupby(key).agg({'SUM':np.sum,'MEAN':np.mean,'STD':np.std})
print grouped
#索引不是日期
df.groupby(df['date'].apply(lambda x:x.month)).first()
df.set_index('date')#或者将date设置为索引
#如果日期是字符串形式存储的
date_string =('2010-09-01','2020-01-01')
a=pd.Series([pd.to_datetime(date) for date in date_string])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
#增加列
df['c']=pd.Series(np.random.randn(10),index=df.index)
df.insert(1,'e',df['a'])#在a列后面插入e列
del df['c'] #删除列c
df2=df.drop(['a','b'],axis=1)#df数据不变,删除后的数据放入df2中
b=df.pop('b')
df.insert(0,'b',b)#移动,pop移除之后再插入
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
#字符串操作
s=pd.Series(list('ABCDEF')
s.str.lower()
s.str.upper()#大小写
s.str.len()
s.str.split('_').str.get(1) #获取切割后的某个元素
s.str.replace('^a|b$','X',case=False)#替换,第一个参数是正则表达式,第二个是要替换的字符串
s=pd.Series(['a1','a2','b1','b2',c])
s.str.extract('([ab])(\d)?') #使用extract方法提取数字:第一个参数是正则表达式,括号表示要提取的部分,结果是a 1,a 2,b 1,b 2,NaN NaN,无法匹配的
s.str.extract('(?P<letter>[abc])(?P<digit>\d)') #输出的结果包含变量名pattern=r'[a-z][0-9]'
print s.str.contains(pattern,na=False)#匹配字符串,na参数用来说明出现NaN数据时匹配成True还是False
s.str.match(pattern,as_index=False)#严格匹配字符串
s.str.endswith('l',na=False) #等效于contains('l$',na=False)
s.str.startwith('l',na=False)#等效于contains('^l',na=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

#读写数据库
import MySQLdb
con=MySQLdb.connect(host="localhost",db="")
sql="SELECT * FROM..."
df=pd.read_sql(sql,con,index_col='id')
con2=execute('DROP TABLE IF EXISTS wheather')
pd.io.sql.write_frame(df,"wheather",con2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
#缺失值数据处理
df=pd.DataFrame(np.random.randn(5,3),index=list('abcde'),columns=['one','two','three'])
df.ix[1,:-1]=np.nan #在简单的运算中,遇到缺失值,运算结果也是缺失值,在描述性统计中,Nan都是作为0进行运算
#df.loc[:,['one','three']]
df.fillna(0) #用0填充缺失值 df.fillna('missing') 用字符串代替缺失值
df.fillna(method='pad')#用前一个数据代替NaN
df.fillna(method='bfill',limit=1)#用后一个数据替代NaN,限制每列只能替代一个NaN
df.fillna(df.mean()['one':'two'])#用平均数代替,选择one,two两列进行缺失值处理
df.dropna(axis=0) #删除含有NaN的行,axis=1 删除列
df.interpolate() #使用插值来估计NaN 如果index是数字,可以设置参数method='value' ,如果是时间,可以设置method='time'
df.replace({1:11,2:12})

pandas使用笔记大全相关推荐

  1. 怎么传日期参数_时间序列amp;日期学习笔记大全(下)

    作者:湛林 来源:凹凸数据 时间序列&日期学习笔记大全(上) 建议收藏 9. 日期 时间的组成 dt.方法,具体参数及含义详见附件 # 可以通过s.dt.time 获得各种信息s.dt.yea ...

  2. SQL语句从入门到精通之笔记大全

    SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE.由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行说明. 下列语句部分是Mssql语句,不可以在acc ...

  3. VLAN学习笔记大全(1)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  VLAN学习 ...

  4. pandas学习笔记:pandas.Dataframe.rename()函数用法

    pandas学习笔记:pandas.Dataframe.rename()函数用法 pandas.Dataframe.rename()函数主要是用来修改Dataframe数据的行名和列名. 主要用到的参 ...

  5. Pandas学习笔记(一)

    Pandas学习笔记一 Pandas数组读取 读取csv.tsv.txt文件 读取excel文件 读取mysql数据表 Pandas数据结构 创建Series的几种方法 根据标签查询Series数据 ...

  6. pandas学习笔记之DateFrame

    pandas学习笔记之DateFrame 文章目录 pandas学习笔记之DateFrame 1.DateFrame的创建 1)认识DataFrame对象 2)由二维列表创建(默认index和colu ...

  7. pandas基础操作大全之数据合并

    在pandas 基础操作大全之数据读取&清洗&分析中介绍了pandas常见的数据处理操作,现在继续对pandas常用的数据合并操作做下介绍,便于大家快速了解,也方便后续需要时快速查询. ...

  8. 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)

    数据分析之Pandas学习笔记(六)(层次化索引.重塑.轴向旋转.行列变换.合并表数据) level层次化索引 unstack()与stack()进行重塑,即:行列索引变换 swaplevel()交换 ...

  9. [Pandas 学习笔记] - No.1 pandas学习笔记

    pandas学习笔记 pandas是基于numpy开发出的数据分析包,用于高效地操作大型数据集.pandas的数据结构有三种 分别为 series,dataframe和panel,对应一维,二维,三维 ...

最新文章

  1. scala构建工具sbt使用介绍
  2. linux学习:进程间通信—管道
  3. 操作系统重点快览第四章
  4. 如何在JavaScript中验证电子邮件地址
  5. mysql允许远程访问
  6. winform空间批量控制
  7. Confluence 6 归档一个空间
  8. HEVC/H265 文档获得
  9. LeetCode 538. 把二叉搜索树转换为累加树
  10. 三星Galaxy Note10配件图曝光:红蓝配色成焦点
  11. Vue中基于Vuex使用echarts组件动态数据绑定的方法
  12. java 最少使用(lru)置换算法_[内附完整源码和文档] 基于C#的可视化虚拟存储器管理(LUR算法)...
  13. linux磁盘分配最佳实践,干货再次来袭!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载八)用命令实现批量添加用户...
  14. 高校学籍管理系统(SQL Server数据库课程设计)
  15. 【命令行】CMD/BAT文件执行时中文乱码的解决方法
  16. FFMPEG音视频解码流程MP4音视频文件流读取(转)
  17. .NET/C#大型项目研发必备(12)--使用MQ消息队列
  18. docker安装gitlab
  19. Vue学习(学习打卡Day16)
  20. Redis Redis主从架构(图灵学院)

热门文章

  1. 1081 Rational Sum (20 分)_22行代码AC
  2. 简便满分解法:1005 继续(3n+1)猜想 (25分)
  3. 一条SQL语句执行得很慢的原因有哪些?
  4. (*长期更新)软考网络工程师学习笔记——Section 14 Linux服务器配置
  5. 单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)
  6. Linux基础优化方法(三)———字符集编码设置优化
  7. java事件的接收_spring发布和接收定制的事件(spring事件传播)
  8. 在Web中如何运用JavaScript实现打印功能
  9. Keil C51软件的使用教程
  10. php.ini不见了,php.ini找不到