文档章节

2.pandas基础

eddy_linux
 eddy_linux
发布于 2017/08/29 23:21
字数 1231
阅读 17
收藏 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
粉丝 19
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部