文档章节

2.pandas基础

eddy_linux
 eddy_linux
发布于 2017/08/29 23:21
字数 1231
阅读 16
收藏 0
点赞 0
评论 0
#encoding:utf8

'''
http://pandas.pydata.org/pandas-docs/stable/10min.html
10分钟了解pandas
'''

import pandas as pd
import numpy as np

#一行
s = pd.Series([1,3,5,np.NaN,8,4])
#打印出来第一列是索引号,第二列是值
print(s)

#二维数组DataFrame
dates = pd.date_range('20170801',periods=6)
print(dates)
data = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print(data)
print(data.shape)
print(data.values)

d = {'A':1,'B':pd.Timestamp('20160801'),'C':range(4),'D':np.arange(4)}
df = pd.DataFrame(d)
print(df)
print(df.dtypes)
print(df.A)

#看前两行
print(data.head(2))

#看最后2行
print(data.tail(2))

print(data.index)
print(data.columns)

print(data.values)

#最基本的统计数据
print(data.describe())
#转制也就是行列标签互换
print(data.T)
#排序
#列标签排序
print(data.sort_index(axis=1))
print(data.sort_index(axis=1,ascending=False))#降序
#行标签排序
print(data.sort_index(axis=0))
#按照某一列的值排序
print(data.sort(columns='A'))
#显示某一列
print(data['A'])
print(data.A)
#显示行
print(data[2:4])
#也可以选择行标签
print(data['20170801':'20170805'])
#推荐以下方式显示
print(data.loc['20170801':'20170803'])
print(data.iloc[2:4])
#同样也可以选择第几行第几列显示
print(data.loc[:,['A','B']])#显示每一行的A和B列
print(data.loc['20170801':'20170803',['A']])#显示行标签0801-0803的行的A列

#显示特定值
print(data.loc['20170801','B'])
print(data.at[pd.Timestamp('20170803'),'B'])
print(data.iloc[1:3,0:2])
print(data.iloc[1,0])
print(data.iat[1,0])
#推荐用at和iat

#条件
print(data[data.A >0])
print(data[data > 0 ])

data2 = data.copy()
tag = ['a'] * 2 + ['b'] * 2 + ['c'] * 2
data2['TAG'] = tag
print(data2)
print(data2[data2.TAG.isin(['a','c'])])#把TAG列里面是a和c的值过滤出来

#修改元素值
print(data)
data.iat[0,0] = 100
print(data)
#修改一列
data.A = range(6)
print(data)
data.B = 200
print(data)

#encoding:utf8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dates = pd.date_range('20170801',periods=6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
print(df)

#新增加一列
df1 = df.reindex(index=dates[0:4],columns=list(df.columns)+['E'])
print(df1)
#给列赋值
df1.loc[dates[1:3],'E']=2
print(df1)

#丢弃空值
print(df1.dropna())
#填充空值
print(df1.fillna(value=5))
#原值不会改变的
print(df1)
#显示是否有空值返回布尔值
print(pd.isnull(df1).any().any())

#列平均值
print(df1.mean())
#行平均值
print(df1.mean(axis=1))
#累加值
print(df1)
#这里要注意空值不会参与计算,每一行的每一列显示的是当前列的值和之前所有列的值累加
print(df1.cumsum())
#累加值
print(df.apply(np.cumsum))

#统计元素出现的次数
s = pd.Series(np.random.randint(10,20,size=20))
print(s)
print(s.value_counts())
#出现次数最多的
print(s.mode())
#元素合并
df = pd.DataFrame(np.random.randn(10,4),columns=list('ABCD'))
print(df)
print(df.iloc[0:3])
#合并
df1 = pd.concat([df.iloc[:3],df.iloc[3:7],df[7:]])
print(df1)
#验证合并
print(df == df1)
print((df == df1).all().all())

#类似sql的外键,可以对列进行联合查询
#select * from left inner join right on left.key = right.key;
left = pd.DataFrame({'key':['foo','foo'],'lval':[1,2]})
right = pd.DataFrame({'key':['foo','foo'],'lval':[4,5]})
print(left)
print(right)
print(pd.merge(left,right,on='key'))

#另一个合并通过插入方式
s = pd.Series(np.random.randint(1,5,size=4),index=list('ABCD'))
print(s)
print(df)
print(df.append(s,ignore_index=True))

#通过插入的方式如果列数不同会默认为Nan直到有值才会进行填充
s = pd.Series(np.random.randint(1,5,size=5),index=list('ABCDE'))
print(s)
print(df.append(s,ignore_index=True))

#分类统计
df = pd.DataFrame({
    'A':['foo','bar','foo','bar','foo','bar','foo','foo'],
    'B':['one','one','two','three','two','two','one','three'],
    'C':np.random.randn(8),
    'D':np.random.randn(8)
    })
print(df)
#把A列进行分组并且求和
print(df.groupby('A').sum())
#多列分组
print(df.groupby(['A','B']).sum())
print(df.groupby(['B','A']).sum())

#encoding:utf8

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#数据整形
#构建行索引
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(df.stack())
#把行索引变为列索引
print(df.unstack())
#当然如果有多层索引这里也可以执行多次转换



#数据透视
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(df.pivot_table(values=['D'],index=['A','B'],columns=['C']))
#以A为行索引C为列索引看E的值
print(df.pivot_table(values=['D'],index=['A'],columns=['C']))
#注意如果透视的数据有多项将会求平均值并填入相应位置,如果没有使用Nan



#时间序列
rng = pd.date_range('20160801',periods=600,freq='s')
s = pd.Series(np.random.randint(0,500,len(rng)),index=rng)
print(s)
#重新采样
#每两分钟采用求和
print(s.resample('2Min').sum())
#每两分钟采用平均值
print(s.resample('2Min').mean())
#以季度为单位
rng = pd.period_range('2000Q1','2016Q1',freq='Q')
print(rng)
#可以进行时间戳转换
print(rng.to_timestamp())
#对时间进行加减
print(pd.Timestamp('20170801') - pd.Timestamp('20170701'))
print(pd.Timestamp('20170801') + pd.Timedelta(days=5))
#类别数据
df = pd.DataFrame({'id':[1,2,3,4,5,6],'raw_grade':['a','a','b','b','a','d']})
print(df)
df['grade'] = df.raw_grade.astype('category')
print(df)
print(df.grade.cat.categories)
#可以对categories进行重新赋值
df.grade.cat.categories = ['very good','good','bad']
print(df)
#对grade排序实际是对grade的值进行排序
print(df.sort_values(by='grade',ascending=True))



#数据可视化
s = pd.Series(np.random.randn(1000),index=pd.date_range('20000101',periods=1000))
print(s)
s = s.cumsum()
print(s)
a = plt.plot(s)
print(plt.show(a))



#数据载入和保存
df = pd.DataFrame(np.random.randn(100,4),columns=list('ABCD'))
print(df)
#写入到磁盘
df.to_csv('data.csv')
#从磁盘读取
a = pd.read_csv('data.csv',index_col=0)
print(a)

 

© 著作权归作者所有

共有 人打赏支持
eddy_linux
粉丝 18
博文 135
码字总数 188789
作品 0
成都
程序员
机器学习|砖家必备的15张速查表

封面.jpg 图片来源: https://github.com/kailashahirwar/cheatsheets-ai 1.Numpy Numpy (Numerical Python)是高性能计算和数据分析的基础包。它以多维数组为基础,包含了丰富的函数库,能够...

最会设计的科研狗
2017/06/25
0
0
Python中pandas模块快速入门

我这里简单介绍一下Python中,pandas模块定义的两种常用的数据结构,Series和DaraFrame。Series和Python中的Dict类似,但是是结构化的,而DataFrame和数据库中的表类似。 1.pandas基本数据结...

小工sevenot
07/01
0
0
7.python数据分析与展示------Pandas库入门

1.Pandas库的介绍 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于Numpy实现,常与Numpy和Matplotlib一同使用 import pandas as pd d =pd.Series...

bxg1065283526
04/29
0
0
Excel 2010基础应用技巧大全

在Excel基础大全里面,我全部透彻讲解Excel所有功能技术特点和应用方法,从Excel基础操作开始,逐步讲解公式与函数、格式设置、数据高级分析、模拟分析、数据透视表、图表、后期打印以及宏与V...

么么哒lalala
2016/01/05
52
0
关于自动化脚本黑盒话的进度

在很久之前就想将自动化脚本编程黑盒化,让黑盒来编制自动化case 这样,我就可以有更多时间去面对以及完善我的自动化测试框架,毕竟总是在一个地方徘徊,终难有出路。 今天excel终于搞定了 ...

测试-雨
2015/09/06
128
0
JAVA多线程-基础篇-目录

刚忙完双十一,本系列内容也恰好告一段落,总共分为11个章节,希望对大家有所帮助 JAVA多线程01-基础篇-基本概念 JAVA多线程02-基础篇-线程创建方式 JAVA多线程03-基础篇-线程运行 JAVA多线程...

x_coder
2017/11/14
0
0
Android面试笔记基础篇

基础一:安卓四大组件。 问题一:安卓四大组件是什么?应该怎么描述它们?生命周期?优先级? 答:四大组件就是Activity Service BroadCastReciver ContentProvider Activity:与用户交互等界...

一阵啪啪啪
01/15
1
0
欢迎进入Hensen_的博客目录(全站式导航)

Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础 语法基础——C++语法基础 语法基础——Objective-C语法基础 语法基础——PHP语法基础 面试复...

qq_30379689
2016/09/23
0
0
linux从小白到linux资深专家之路

linux从小白到linux资深专家之路 为什么学Linux,理由如下: Linux是免费; Linux是开源的,你可以修改源代码; Linux是开放的,有广泛的社区; 学习Linux可以更好的掌握计算机技术; Linux是...

lxm111111
2016/07/16
0
0
嵌入式linux爱好者看过来

嵌入式的基础—C语言,针对C语言基础相对薄弱但是想学嵌入式的同学,我们特推出了系列课程,该系列课程包括:嵌入式Linux学习思路分析、C语言基础-数据类型、C语言基础-运算符与表达式、C语言...

farsightemb
2011/01/20
362
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

代码生成利器:IDEA 强大的 Live Templates

代码生成利器:IDEA 强大的 Live Templates

qwfys
25分钟前
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
28分钟前
1
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
31分钟前
0
0
日常运维--rsync同步工具

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

chencheng-linux
35分钟前
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
48分钟前
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
1
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
1
0
rsync工具介绍/rsync通过ssh同步

rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

Hi_Yolks
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部