侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python数据分析库pandas基本操作方法

Python  /  管理员 发布于 7年前   201

pandas是什么?

是它吗?

。。。。很显然pandas没有这个家伙那么可爱。。。。

我们来看看pandas的官网是怎么来定义自己的:

pandas is an open source, easy-to-use data structures and data analysis tools for the Python programming language.

很显然,pandas是python的一个非常强大的数据分析库!

让我们来学习一下它吧!

1.pandas序列

import numpy as np import pandas as pd  s_data = pd.Series([1,3,5,7,np.NaN,9,11])#pandas中生产序列的函数,类似于我们平时说的数组 print s_data 

2.pandas数据结构DataFrame

import numpy as np import pandas as pd  #以20170220为基点向后生产时间点 dates = pd.date_range('20170220',periods=6) #DataFrame生成函数,行索引为时间点,列索引为ABCD data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print data print print data.shape print print data.values 

3.DataFrame的一些操作(1)

import numpy as npimport pandas as pd#设计一个字典d_data = {'A':1,'B':pd.Timestamp('20170220'),'C':range(4),'D':np.arange(4)}print d_data#使用字典生成一个DataFramedf_data = pd.DataFrame(d_data)print df_data#DataFrame中每一列的类型print df_data.dtypes#打印A列print df_data.A#打印B列print df_data.B#B列的类型print type(df_data.B)

4.DataFrame的一些操作(2)

import numpy as np import pandas as pd  dates = pd.date_range('20170220',periods=6) data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print data print #输出DataFrame头部数据,默认为前5行 print data.head() #输出输出DataFrame第一行数据 print data.head(1) #输出DataFrame尾部数据,默认为后5行 print data.tail() #输出输出DataFrame最后一行数据 print data.tail(1) #输出行索引 print data.index #输出列索引 print data.columns #输出DataFrame数据值 print data.values #输出DataFrame详细信息 print data.describe() 

5.DataFrame的一些操作(3)

import numpy as np import pandas as pd  dates = pd.date_range('20170220',periods=6) data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print data print #转置 print data.T #输出维度信息 print data.shape #转置后的维度信息 print data.T.shape #将列索引排序 print data.sort_index(axis = 1) #将列索引排序,降序排列 print data.sort_index(axis = 1,ascending=False) #将行索引排序,降序排列 print data.sort_index(axis = 0,ascending=False) #按照A列的值进行升序排列 print data.sort_values(by='A') 

6.DataFrame的一些操作(4)

import numpy as np import pandas as pd  dates = pd.date_range('20170220',periods=6) data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print data #输出A列 print data.A #输出A列 print data['A'] #输出3,4行 print data[2:4] #输出3,4行 print data['20170222':'20170223'] #输出3,4行 print data.loc['20170222':'20170223'] #输出3,4行 print data.iloc[2:4] 输出B,C两列 print data.loc[:,['B','C']] 

7.DataFrame的一些操作(5)

import numpy as np import pandas as pd  dates = pd.date_range('20170220',periods=6) data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print data #输出A列中大于0的行 print data[data.A > 0] #输出大于0的数据,小于等于0的用NaN补位 print data[data > 0] #拷贝data data2 = data.copy() print data2 tag = ['a'] * 2 + ['b'] * 2 + ['c'] * 2 #在data2中增加TAG列用tag赋值 data2['TAG'] = tag print data2 #打印TAG列中为a,c的行 print data2[data2.TAG.isin(['a','c'])] 

8.DataFrame的一些操作(6)

import numpy as np import pandas as pd  dates = pd.date_range('20170220',periods=6) data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print data #将第一行第一列元素赋值为100 data.iat[0,0] = 100 print data #将A列元素用range(6)赋值 data.A = range(6) print data #将B列元素赋值为200 data.B = 200 print data #将3,4列元素赋值为1000 data.iloc[:,2:5] = 1000 print data 

9.DataFrame的一些操作(7)

import numpy as np import pandas as pd  dates = pd.date_range('20170220',periods = 6) df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD')) print df #重定义索引,并添加E列 dfl = df.reindex(index = dates[0:4],columns = list(df.columns)+['E']) print dfl #将E列中的2,3行赋值为2 dfl.loc[dates[1:3],'E'] = 2 print dfl #去掉存在NaN元素的行 print dfl.dropna() #将NaN元素赋值为5 print dfl.fillna(5) #判断每个元素是否为NaN print pd.isnull(dfl) #求列平均值 print dfl.mean() #对每列进行累加 print dfl.cumsum() 

10.DataFrame的一些操作(8)

import numpy as np import pandas as pd dates = pd.date_range('20170220',periods = 6) df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD')) print df dfl = df.reindex(index = dates[0:4],columns = list(df.columns)+['E']) print dfl #针对行求平均值 print dfl.mean(axis=1) #生成序列并向右平移两位 s = pd.Series([1,3,5,np.nan,6,8],index = dates).shift(2) print s #df与s做减法运算 print df.sub(s,axis = 'index') #每列进行累加运算 print df.apply(np.cumsum) #每列的最大值减去最小值 print df.apply(lambda x: x.max() - x.min()) 

11.DataFrame的一些操作(9)

import numpy as np import pandas as pd dates = pd.date_range('20170220',periods = 6) df = pd.DataFrame(np.random.randn(6,4) , index = dates , columns = list('ABCD')) print df #定义一个函数 def _sum(x):  print(type(x))  return x.sum() #apply函数可以接受一个函数作为参数 print df.apply(_sum) s = pd.Series(np.random.randint(10,20,size = 15)) print s #统计序列中每个元素出现的次数 print s.value_counts() #返回出现次数最多的元素 print s.mode() 

12.DataFrame的一些操作(10)

import numpy as np import pandas as pd  df = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD')) print df #合并函数 dfl = pd.concat([df.iloc[:3],df.iloc[3:7],df.iloc[7:]]) print dfl #判断两个DataFrame中元素是否相等 print df == dfl 

13.DataFrame的一些操作(11)

import numpy as npimport pandas as pddf = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD'))print dfleft = pd.DataFrame({'key':['foo','foo'],'lval':[1,2]})right = pd.DataFrame({'key':['foo','foo'],'rval':[4,5]})print leftprint right#通过key来合并数据print pd.merge(left,right,on='key')s = pd.Series(np.random.randint(1,5,size = 4),index = list('ABCD'))print s#通过序列添加一行print df.append(s,ignore_index = True)

14.DataFrame的一些操作(12)

import numpy as np import pandas as pd df = pd.DataFrame({'A': ['foo','bar','foo','bar',        'foo','bar','foo','bar'],      'B': ['one','one','two','three',        'two','two','one','three'],      'C': np.random.randn(8),      'D': np.random.randn(8)}) print df print #根据A列的索引求和 print df.groupby('A').sum() print #先根据A列的索引,在根据B列的索引求和 print df.groupby(['A','B']).sum() print #先根据B列的索引,在根据A列的索引求和 print df.groupby(['B','A']).sum() 

15.DataFrame的一些操作(13)

import pandas as pd import numpy as np #zip函数可以打包成一个个tuple tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',       'foo', 'foo', 'qux', 'qux'],      ['one', 'two', 'one', 'two',       'one', 'two', 'one', 'two']])) print tuples #生成一个多层索引 index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) print index print df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B']) print df print #将列索引变成行索引 print df.stack() 

16.DataFrame的一些操作(14)

import pandas as pd import numpy as np  tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',       'foo', 'foo', 'qux', 'qux'],      ['one', 'two', 'one', 'two',       'one', 'two', 'one', 'two']])) index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B']) print df print stacked = df.stack() print stacked #将行索引转换为列索引 print stacked.unstack() #转换两次 print stacked.unstack().unstack() 

17.DataFrame的一些操作(15)

import pandas as pd import numpy as np df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,      'B' : ['A', 'B', 'C'] * 4,      'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,      'D' : np.random.randn(12),      'E' : np.random.randn(12)}) print df #根据A,B索引为行,C的索引为列处理D的值 print pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C']) #感觉A列等于one为索引,根据C列组合的平均值 print df[df.A=='one'].groupby('C').mean() 

18.时间序列(1)

import pandas as pd import numpy as np  #创建一个以20170220为基准的以秒为单位的向前推进600个的时间序列 rng = pd.date_range('20170220', periods=600, freq='s') print rng #以时间序列为索引的序列 print pd.Series(np.random.randint(0, 500, len(rng)), index=rng) 

19.时间序列(2)

import pandas as pd import numpy as np  rng = pd.date_range('20170220', periods=600, freq='s') ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng) #重采样,以2分钟为单位进行加和采样 print ts.resample('2Min', how='sum') #列出2011年1季度到2017年1季度 rng1 = pd.period_range('2011Q1','2017Q1',freq='Q') print rng1 #转换成时间戳形式 print rng1.to_timestamp() #时间加减法 print pd.Timestamp('20170220') - pd.Timestamp('20170112') print pd.Timestamp('20170220') + pd.Timedelta(days=12) 

20.数据类别

import pandas as pd import numpy as np  df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']}) print df #添加类别数据,以raw_grade的值为类别基础 df["grade"] = df["raw_grade"].astype("category") print df #打印类别 print df["grade"].cat.categories #更改类别 df["grade"].cat.categories = ["very good", "good", "very bad"] print df #根据grade的值排序 print df.sort_values(by='grade', ascending=True) #根据grade排序显示数量 print df.groupby("grade").size() 

21.数据可视化

import pandas as pd import numpy as np import matplotlib.pyplot as plt  ts = pd.Series(np.random.randn(1000), index=pd.date_range('20170220', periods=1000)) ts = ts.cumsum() print ts ts.plot() plt.show() 

22.数据读写

import pandas as pd import numpy as np  df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD')) #数据保存,相对路径 df.to_csv('data.csv') #数据读取 print pd.read_csv('data.csv', index_col=0) 

数据被保存到这个文件中:

打开看看:

以上这篇Python数据分析库pandas基本操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    Python简单实现的代理服务器端口映射功能示例
    下一条:
    python 定时修改数据库的示例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客