python数据分析--pandas-01

#coding:utf-8
import scrapy
import xlwt, lxml
import re, json
import matplotlib.pyplot as plt
import numpy as np
import pylab
from scipy import linalg
from pandas import Series,DataFrame

'''
#http://pandas.pydata.org/
#pandas=pannel data + data analysis
基本功能
    开发pandas时提出的需求
        具备按轴自动或显示数据对齐功能的数据结构
        集成时间序列功能
        既能处理时间序列数据也能处理非时间序列数据的数据结构
        数学运算和约简(比如对某个轴求和)可以根据不同的元数据(轴编号)执行
        灵活处理缺失数据
        合并及其他出现在常见数据库(例如基于SQL)中的关系型运算

数据结构 Series DataFrame Index
Series 是一种类似于一维数组的对象,他由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成
Series的字符串表现形式为:索引在左边,直在右边
创建、读写、运算
 
'''

'''
#用数组生成Series 索引默认0-。。。
obj=Series([4,7,-5,3])
print(obj)
print(obj.values)#返回np.ndarray
print(obj.index)

#指定Series的index
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
print(obj2)
print(obj2.index)
print(obj2['a'])
print(obj2[obj2>0])
print('e' in obj2 )#判断索引是否存在

#使用字典生成Series
sdata={'a':400,'b':500,'d':700,'s':900}
obj3=Series(sdata)
print(obj3)

#使用字典生成Series,并额外指定index,不匹配部分为NaN
alpha=['a','b','c','d']
obj4=Series(sdata,index=alpha)
print(obj4)

#Series相加,相同索引部分相加,不同置NaN
print(obj3+obj4)

#指定Series及其索引的名字
obj4.name='account'
obj.index.name='alpha'
#替换index
obj.index=['Bob','Steve','Jeff','Ryan']
print(obj)
'''
'''
DataFrame 是一个表格型的数据结构,它有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
DataFrame既有行索引也有列索引,它可以被看作由Series组成的字典(共用同一个索引)
 
'''

'''
#用字典生成DataFrame,key为列的名字
data = {'state':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year':[2000, 2001, 2002, 2001, 2002],'pop':[1.5, 1.7, 3.6, 2.4, 2.9]}
print(DataFrame(data))
#DataFrame(data,index,column)#指定列的顺序以及索引【在列中指定不存在的列,默认数据用NaN】
df2=DataFrame(data,columns=['year','state','pop'],index=['one','two','three','four','five'])
print(df2)
print(df2['state'])
print(df2.year)
print(df2.ix['three'])#取某一行(索引)的列属性值
df2['debt']=16.5#添加或更新一整列
df2.debt=np.arange(5)#用numpy数组修改元素
print(df2)

#用Series指定要修改的索引及其对应的值,没有指定的默认数据用NaN
val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])
df2.debt=val
print(df2)

#赋值给新列
df2['eastern']=(df2.state=='Ohio')#若state等于Ohio为True
print(df2)

#DataFrame转置
pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2003:3.6}}
df3=DataFrame(pop)
print(df3)
# print(df3.T)

#指定索引顺序,以及使用切片初始化数据
# print(DataFrame(pop,index=[2001,2002,2003]))
pdata={'Ohio':df3['Ohio'][:-1],'Nevada':df3.Nevada[:2]}
print(DataFrame(pdata))
#指定索引和列的名字
df3.index.name='year'
df3.columns.name='state'
print(df3)
print(df3.values)
'''

'''pandas 中主要的index对象
index 最广泛的index对象,将轴标签为一个由python对象组成的numpy数组
Int64Index 针对整数的特殊index
MiltiIndex “层次化”索引对象,表示单个轴上的多层索引,可以看做由原数组组成的数组
DatetimeIndex 存储纳秒时间戳
PeriodIndex 针对Period数据的特殊index

drop 删除传入的值,并得到新的索引
insert 将元素插入到索引i处,并得到新的index
is_monotonic 当各元素均大于等于前一个元素时返回True
is_unique 当index没有重复值时,返回True
unique 计算index中唯一值数组

基本功能 重新索引
    创建一个适应新索引的对象,该Series的reindex将会根据新索引进行重排,如果某个索引值当前不存在,就引入缺失值
    对于时间序列这样的有序数据,重新索引时可能需要做一些插值处理。method选项即可达到此目的
    
reindex(index,method,fill_value,limit,level,copy)
limit 前向或后向填充时的最大填充量
level 在MultiIndex的指定级别上匹配简单索引,否则选取其子集
copy 默认为True,无论如何都复制。如果为False,则新旧相等就不复制
'''

'''
#重新指定索引及顺序
obj=Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])
print(obj)
obj2=obj.reindex(['a','b','d','c','e'],fill_value=0)#重新索引,若索引不存在则指定默认值(fill_value)[算不算处理缺失值呢???]
print(obj2)

#重新指定索引并指定元素填充方法
obj3=Series(['blue','purple','yellow'],index=np.arange(0,5,2))
print(obj3)
print(obj3.reindex(range(6),method='ffill'))#method=(ffill), backfill (bfill) or nearest

#对DataFrame重新索引

df=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])
print(df)
df2=df.reindex(['a','b','c','d'])
print(df2)

#重新指定column(列)index(行)
states=['Texas','Utah','California']
# print(df.reindex(columns=states))

#对DataFrame重新指定索引并指定元素填充方法
df3=df.reindex(index=['a','b','c','d'],columns=states)#????method='ffill',加入报错: index must be monotonic increasing or decreasing
print(df3)
'''

'''丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。由于需要执行一些数据整理和集合逻辑,所以drop方法返回的是一个在指定轴上删除了指定值的新对象'''
'''
#Series根据索引删除元素
obj = Series(np.arange(5), index = ['a', 'b', 'c', 'd', 'e'])
new_obj = obj.drop('c')
print(new_obj)
print(obj.drop(['c','d']))

#DataFrame删除元素,可指定索引或列
df=DataFrame(np.arange(16).reshape(4,4),index=np.arange(4),columns=['one','two','three','four'])
print(df)
print(df.drop(1))
print(df.drop('two',axis=1))#删除指定列
#df.dropna()删除NaN..
'''

'''
#索引、选取和过滤
#为了在DataFrame的行上进行标签索引,引入了专门的索引字段ix

#DataFrame的索引
df=DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','NewYork'],columns=['one','two','three','four'])
print(df)
print(df['two'])#打印列
print(df[:2])#切片打印
print(df.ix['Colorado','two'])#打印指定索引和列【此为指定的某列元素】
print(df.ix['Colorado',['two','three']])#)#打印指定索引和列【此为指定的某行的某多列元素】
print(df.ix[['Colorado','Utah'],[3,0,1]])#)#打印指定索引和列【此为指定的某多行的某多列(按默认数字索引0,1,2...)元素】
print(df.ix[2])#打印第二行(从0开始)
print(df.ix[:'Utah','two'])#从开始到Utah的第二列
#根据条件选择
print(df[df.three>5])#满足条件的所有行
print(df<5)#打印bool类型【满足条件的元素为True】
df[df<5]=0
print(df)
'''

'''
算术运算和数据对齐
    对不同的索引对象进行算术运算
    自动数据对齐在不重叠的索引处引入了NA值,缺失值会在算术运算过程中
    对于DataFrame,对齐操作会同时发生在行和列上
    fill_value参数
    DataFrame和Series之间的运算
'''
s1=Series([7.3,-2.5,3.4,1.5],index=['a','c','d','e'])
s2=Series([-2.1,3.6,-1.5,4,3.1],index=['a','c','e','f','g'])

print(s1+s2)#Series算术运算索引相同才能进行运算,否则置NaN

#DataFrame加法,
df1=DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado'])
df2=DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Ohio','Texas','Utah','Oregon'])
print(df2+df1)#DataFrame算术运算索引和列都必须匹配,否则置NaN

#数据填充
df3=DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))
df4=DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))
print(df3.add(df4,fill_value=0))#NaN默认填充0进行运算
print(df3.reindex(columns=df2.columns,fill_value=0))#重新索引,NaN置0

#DataFrame与Series之间的操作
arr=np.arange(12).reshape((3,4))
print(arr)
print(arr[0])
print(arr-arr[0])
df5=DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Utah', 'Ohio', 'Texas', 'Oregon'])
series=df5.ix[0]
print(df5)
print(series)
print(df5-series)
series2=Series(range(3),index=list('bef'))
print(series2)
print(df5+series2)#有相同列或索引运算,否则置NaN
series3=df5.d
print(df5.d)
print(df5.sub(series3,axis=0))#按列减

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值