pandas

from pandas import Series, DataFrame

import pandas as pd

Series

obj = Series([4,7,-5,3])

obj2 = Series([4,7,-5,3],index = ['a','b','c','d'])

sdata = {'Ohio':35000, 'Texas':71000, 'Oregon':16000, 'Utah': 5000}

obj3 = Series(sdata)

如果只传入一个字典,则结果Series中的索引就是原字典的键。

states = ['California','Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index = states)

pandas中的缺失用NaN来表示,

pd.isnull(obj4)
pd.notnull(obj4)

obj4.isnull()
obj4.name = 'population'
obj4.index.name = 'state'

Series的索引可以通过赋值的方式就地修改

DataFrame

构建DataFrame

data = {'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year': [2000,2001,2002,2001,2001],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}

frame = DataFrame(data) #自动加上索引

可以指定列序列顺序

frame = DataFrame(data,columns = ['year', 'state', 'pop'])

可以指定行的索引

frame = DataFrame(data,columns = ['year','state', 'pop'],index = ['one', 'two', 'three', 'four','five',])

如果传入的列在数据中找不到,就会产生NA值

frame = DataFrame(data,columns = ['year','state','pop','debt'])

获取列序列

frame.columns

列索引

frame['state']
frame.year

行索引

frame.ix['three']

列可以通过赋值的方式进行修改,数组赋值时长度必须一致,如果赋值的是一个Series,就会精确到索引,所有的空位会填上缺失值。

frame.debt = 16.8

不存在的列赋值会创建新的列

关键字del 用于删除列

另一种构建数据的形式叫嵌套字典

pop = {
'Nevada': {2001:2.4,2002:2.9},
'Ohio': {2000:1.5,2001:1.7,2002:3.6}
}

frame3 = DataFrame(pop)

可以进行转置

frame3.T

可以为DataFrame设置index and columns 的 name

frame3.index.name = 'year'
frame3.columns.name = 'state'

索引对象

index #不可修改
index = pd.Index(np.arange(3))

Index对象的主要类别和方法和属性查看p126

Series和DataFrame的基本功能

重新索引

obj = Series([4.5,7.2,-5.3,3.6],index = ['b', 'c', 'a', 'd'])
obj2 = obj.reindex(['a','b','c','d','e'])

当重新索引时不存在,就会引入缺失值,也可以填入默认值

obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'],fill_value = 0)

除了填入默认值fill_value, 其他的method,包括ffill或pad向前填充值,bfill或backfill向后填充值

obj3 = Series('blue','green', 'yellow',index =[0,2,4])
obj3.reindex(range(6),method = 'ffill')

使用reindex()可以重新索引行,使用colunms关键字可以重新索引列:

obj3.reindex(columns = ['Texas', 'Utah', 'California'])

行和列可以同时重新索引:

obj3.reindex(index = [],method = 'ffill', columns = [])

利用ix的索引标签功能可以达到相同的功能:

obj3.ix(['a','b','c','d'],['Texas','Utah','California'])

reindex的一些参数:

index

method

limit 前向或者后向填充时的最大填充量

level ...

copy ...

columns

丢弃指定轴上的项

drop方法返回的是一个在指定轴上删除了指定值的新对象

obj = Series(np.arange(5), index = ['a','b','c','d','e'])
obj_new = obj.drop('c')
obj_new = obj.drop(['c','d'])

对于DataFrame,可以删除任意轴上的索引值:

data = DataFrame(np.arange(16).reshape(4,4),index = ['Ohio', 'California', 'Utah', 'New York'],
columns = [1,2,3,4])

data.drop('Ohio')
data.drop(['Ohio','New York'])
data.drop('Ohio',axis = 0)
data.drop(1,axis = 1)
data.drop([1,2],axis = 1)

索引、选取和过滤

Series的索引

obj = Series(np.arange(4.),index = ['a','b','c','d'])
obj['a']
obj[1]
obj[2:4]
obj[['a','c','d']]
obj[obj > 1]

注意,切片运算obj[1:2]包括2,obj['a':'c']包括'c'

Series的赋值

obj['a':'c'] = 5

DataFrame的索引

data = DataFrame(np.arange(16).reshape(4,4),index = ['Ohio','Colorado', 'Utah','New York'],
columns = [1,2,3,4])

单索引获取的是列

data[1]
data[[1,2]]

通过切片或者布尔型选取行

data[:2]
data[data[3]>5]

通过布尔型DataFrame进行索引:

data < 5

data[data < 5] = 0

对行进行标签索引,可以使用ix

data.ix[2]
data.ix['Colorado',[1,2]]
data.ix[['Colorado','Utah'],[3,0,1]]

DataFrame的索引汇总

obj[val] 选取单个列或一组列

obj.ix[val] 选取单个行或者一组行

obj.ix[:,val] 选取单个列或列子集

obj.ix[val1,val2] 同时选取列和行

reindex

xs方法 根据标签选取单行和单列,并返回一个Series

icol,irow ...

get_value, set_value 根据行标签和列标签选取单个值

算术运算和数据对齐

对象相加时获得是并集

s1 = Series([1,2,3,4,5],index = ['a', 'c', 'd', 'e','f'])
s2 = Series([2,3,4,5,6], index = ['a','b','c','d','e'])

s1+ s2

a 3.0
b NaN
c 6.0
d 8.0
e 10.0
f NaN
dtype: float64

自动的数据对齐操作在不重叠的索引处引入NA值。

缺失值会在算数运算中传播

对于DataFrame来说,行和列上的对齐操作同时发生

使用add算术加时用fill_value可以避免引入NA值

df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))
df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))

df2+ df1
a b c d e
0 0.0 2.0 4.0 6.0 NaN
1 9.0 11.0 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN
df1.add(df2,fill_value = 0)
a b c d e
0 0.0 2.0 4.0 6.0 4.0
1 9.0 11.0 13.0 15.0 9.0
2 18.0 20.0 22.0 24.0 14.0
3 15.0 16.0 17.0 18.0 19.0

灵活额算术方法

add()
sub()
div()
mul()

DataFrame与Series之间的运算

默认情况下,DataFrame与Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一致向下广播。

如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引形成并集。

如果要匹配行且在列上广播,必须使用算术运算方法

frame.sub(series,axis = 0)

函数应用和映射

frame = DataFrame(np.random.randn(4,3),columns = list('bde'),index = ['Utah', 'Ohio', 'Texas', 'Oregon'])

np.abs(frame)

f = lambda x: x.max() - x.min()

frame.apply(f)

np.mean(frame,axis = 1)
np.sum(frame,axis = 1)

def f(x):
return Series([x.min(),y.max()],index=['min','max'])

frame.apply(f)

format = lambda x: '%.2f' % x

frame.applymap(format)

排序和排名

obj = Series(range(4), index=['b','c','d','a'])
obj.sort_index()

对于DataFrame来说可以对任意轴进行排序

frame = DataFrame(np.arange(8).reshape(2,4),index = ['One','Two'], columns = ['a','c','b','d'])

frame.sort_index(axis = 0)# 表示对行标签进行索引
frame.sort_index(axis = 1) # 表示对列标签进行索引

sort_index默认是升序排序的,也可以降序排序,关键字ascending = False

frame.sort_index(axis = 1, ascending = False)

按值来进行排序可以用order() ############存在问题

obj = Series(np.random.randn(5))

frame = DataFrame({'b':[4,7,-3,2], 'a':[0,1,0,1]})
frame.sort_index(by = 'b')
frame.sort_index(by = ['a', 'b'])

排名ranking

obj = Series([7,-5,7,4,2,0,4])
obj.rank()
obj = Series([7,-5,7,4,2,0,4])
obj.rank()
0 6.5
1 1.0
2 6.5
3 4.5
4 3.0
5 2.0
6 4.5
dtype: float64
obj.rank(method = 'first')
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
dtype: float64
obj.rank(method = 'max')
0 7.0
1 1.0
2 7.0
3 5.0
4 3.0
5 2.0
6 5.0
dtype: float64
obj.rank(method = 'max',ascending = False)
0 2.0
1 7.0
2 2.0
3 4.0
4 5.0
5 6.0
6 4.0
dtype: float64
obj.rank(method = 'min')
0 6.0
1 1.0
2 6.0
3 4.0
4 3.0
5 2.0
6 4.0
dtype: float64
obj.rank(method = 'average')#默认

带有重复值的轴索引

obj = Series(range(5),index = ['a','a','b','b','c'])
obj.index.is_unique#index的值是否唯一

obj['a']
obj['c']

对于DataFrame来说也一样

汇总和计算描述统计

df = DataFrame([[1.4,np.nan],[7.2,-4.2],[np.nan,np.nan],[0.75,-1.3]],index = ['a','b','c','d'],columns = ['one','two'])

df.sum()#所有的行求sum
df.sum(axis = 1) # 所有的列求sum

注意 NA值会自动被排除,除非整个切片都是NA值,

df.mean(axis = 1, skipna = False)

约简方法的常用选项

axis 约简的轴,行用0,列用1

skipna 排除缺失值,默认值为True

level ...

df.idxmax()
df.idxmin()# 达到最大值或最小值的索引

df.cumsum()# 累加

df.describe() # 一次性产生多个汇总统计
one two
count 3.000000 2.00000
mean 3.116667 -2.75000
std 3.551174 2.05061
min 0.750000 -4.20000
25% 1.075000 -3.47500
50% 1.400000 -2.75000
75% 4.300000 -2.02500
max 7.200000 -1.30000

对于非数值型数据,describe会产生另外一种汇总统计:

obj = Series(['a','b','c','d'] * 4)
obj.describe()
count 16
unique 4
top b
freq 4
dtype: object
obj.describe()
count 16.000000
mean 2.500000
std 1.154701
min 1.000000
25% 1.750000
50% 2.500000
75% 3.250000
max 4.000000
dtype: float64

其他的统计汇总详见P114

相关系数和协方差 ---------------未完备-----------------

from pandas_datareader import data as web
all_data = {}
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOD']:
all_data[ticker] = web.get_data_yahoo(ticker,'1/1/2000','1/1/2010')
price = DataFrame({tic: data['Adj Close'] for tic,data in all_data.iteritems()})
volume = DataFrame({tic: data['Volume'] for tic,data in all_data.iteritems()})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容