文档章节

2.pandas基础

eddy_linux
 eddy_linux
发布于 2017/08/29 23:21
字数 1231
阅读 19
收藏 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
粉丝 21
博文 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
2018/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
2018/04/29
0
0
思途旅游CMS V6.0.201708.03

更新包 产品名 描述 kb2017080303 思途CMS_基础 1、移动端积分商城; 优化 kb2017080201 思途CMS_基础 1、修复缓存目录无法创建问题; 修复 kb2017080103 思途CMS_基础 1、解决部分服务器限制...

谢二公子
2017/08/04
0
0
Excel 2010基础应用技巧大全

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

么么哒lalala
2016/01/05
52
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
45分钟前
0
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部