Python数据分析库pandas基本操作
2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多
个人分类: Python第三方库
所属专栏: python第三方库

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 np

import pandas as pd

#设计一个字典

d_data = {'A':1,'B':pd.Timestamp('20170220'),'C':range(4),'D':np.arange(4)}

print d_data

#使用字典生成一个DataFrame

df_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 np

import pandas as pd

df = pd.DataFrame(np.random.randn(10,4) , columns = list('ABCD'))

print df

left = pd.DataFrame({'key':['foo','foo'],'lval':[1,2]})

right = pd.DataFrame({'key':['foo','foo'],'rval':[4,5]})

print left

print 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基本操作的更多相关文章

  1. 教程 | 一文入门Python数据分析库Pandas

    首先要给那些不熟悉 Pandas 的人简单介绍一下,Pandas 是 Python 生态系统中最流行的数据分析库.它能够完成许多任务,包括: 读/写不同格式的数据 选择数据的子集 跨行/列计算 寻找并 ...

  2. python数据分析库pandas

    在我看来,对于Numpy以及Matplotlib,Pandas可以帮助创建一个非常牢固的用于数据挖掘与分析的基础.而Scipy(会在接下来的帖子中提及)当然是另一个主要的也十分出色的科学计算库,但是我 ...

  3. Python 数据处理库 pandas 入门教程

    Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...

  4. Python 数据处理库pandas教程(最后附上pandas_datareader使用实例)

    0 简单介绍 pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有 ...

  5. Python数据分析之Pandas操作大全

    从头到尾都是手码的,文中的所有示例也都是在Pycharm中运行过的,自己整理笔记的最大好处在于可以按照自己的思路来构建矿建,等到将来在需要的时候能够以最快的速度看懂并应用=_= 注:为方便表述,本章设 ...

  6. Python数据分析之pandas基本数据结构:Series、DataFrame

    1引言 本文总结Pandas中两种常用的数据类型: (1)Series是一种一维的带标签数组对象. (2)DataFrame,二维,Series容器 2 Series数组 2.1 Series数组构成 ...

  7. Python 数据分析:Pandas 缺省值的判断

    Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...

  8. 在量化金融中15个最流行的Python数据分析库

    Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...

  9. Python数据分析之pandas学习

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

随机推荐

  1. HashMap的两种排序方式

    Map<String, Integer> map = new HashMap<String, Integer>();map.put("d", 2);map. ...

  2. 20165309 实验三 敏捷开发与XP实践

    2017-2018-2 20165309实验三<Java面向对象程序设计>实验报告 一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验步骤 (一)代码规范 1.在I ...

  3. 背包DP 存在异或条件的状态转移问题

    题目链接 分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的 题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀 我们可以用dp[i][ ...

  4. 先天性肾上腺增生症(ACH)

    先天性肾上腺增生症 类型 症状 并发症 治疗 情感支持 产前筛查 预防 什么是先天性肾上腺皮质增生症? 先天性肾上腺增生症(CAH)是一组影响肾上腺的遗传性疾病.肾上腺产生激素皮质醇和醛固酮.CAH是 ...

  5. Android测试(二)——drozer使用

    drozer启动: 1)首先在模拟 器或者安卓设备上开启drozer; 2)然后打开adb,转发端口: adb forward tcp:31415 tcp:31415 3)在电脑上开启drozer: ...

  6. 5月21 练习AJAX的查看详细及批量删除

    老师讲过之后的复习: 显示数据的代码部分: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  7. udp用户数据报协议

    UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层 ...

  8. vue虚拟DOM源码学习-vnode的挂载和更新流程

    代码如下: <div id="app"> {{someVar}} </div> <script type="text/javascript& ...

  9. [LeetCode] 191. Number of 1 Bits ☆(位 1 的个数)

    描述 Write a function that takes an unsigned integer and return the number of '1' bits it has (also kn ...

  10. 把旧系统迁移到.Net Core 2.0 日记 (16) --Cors跨域访问

    IE浏览器的Intranet局域网设置默认是可以跨域访问的.chrome就不可以. 这里说的跨域是指javascript代码不能跨域, 当然你在后端controller代码里用HttpClient.G ...