《利用pyhton进行数据分析》笔记-Pandas(二)

Pandas笔记第二章:

接上一章, 本章主是Pandas数据的增删改查,以及算术运算和函数的应用以及映射。

1.索引、选取和过滤

# Series
obj = Series(np.arange(4), index=['a', 'b', 'c', 'd'])

obj['b']  # 选取 索引b 值, 返回值为 1
obj[1] # 根据下标获取值

obj[:2] # 下标切片索引
# 返回值: 
# a    0
# b    1
# dtype: int64

obj['a':'c'] # 标签切片
# 返回值
# a    0
# b    1
# c    2
# dtype: int64

obj[obj>1] # 跟据元素的值过滤
# 返回值
# c    2
# d    3
# dtype: int64

obj[['a','b','c']] # 根据标签索引多个
# 返回值
# a    0
# b    1
# c    2
# dtype: int64

obj<3 # 每个元素的比较
# 返回bool值:
# a     True
# b     True
# c     True
# d    False
# dtype: bool

# DataFrame

data = DataFrame(np.arange(16).reshape((4,4)), index=['a', 'b', 'c', 'd'], columns=  ['one', 'two', 'three', 'four'])

data['one']
# 返回值
# a     0
# b     4
# c     8
# d    12
# Name: one, dtype: int64


data[['one','two']]
# 返回值
#       one two
#   a   0   1
#   b   4   5
#   c   8   9
#   d   12  13


data[1:2] # 开区间,右边的数不包含
# 返回值
#    one    two three   four
#  b    4   5   6   7

data['one':'two']   # 注意, 这种方法根本不可用
# 返回值
#   one two three   four


data[data['one']>4]
# 返回值
#   one two three   four
#   c   8   9   10  11
#   d   12  13  14  15


data<8
# 返回值:
#   one two three   four
# a True    True    True    True
# b True    True    True    True
# c False   False   False   False
# d False   False   False   False


data.iloc[1:4]
# 返回值

#   one two three   four
# b 4   5   6   7
# c 8   9   10  11
# d 12  13  14  15

data.loc['a':'c']
# 返回值
#       one two three   four
# a 0   1   2   3
# b 4   5   6   7
# c 8   9   10  1

data.loc ['a',['one', 'three' ]] #
# 返回值:
# one      0
# three    2
# Name: a, dtype: int32
   
data.loc['a'].iloc[[2,3]]
# 返回值
# three    2
# four     3
# Name: a, dtype: int32

data.ix[data.one > 3,:3]  
# 返回值
#   one two three
# b 4   5   6
# c 8   9   10
# d 12  13  14

data.loc[data.one > 3].iloc[:,:3] # 与上边等价
# 返回值
#   one two three
# b 4   5   6
# c 8   9   10
# d 12  13  14

需要注意的有两点:

  1. 利用下标索引与利用标签索引的区别:下标索引为开区间, 标签索引为闭区间。
  2. ix方法已经不推荐始用,改用loc以及iloc。
    loc是根据定义的index标签索引。 iloc根据行号(下标)索引。需要注意的是, 这两种方法都是用来对行进行操作。

2. 算术运算和数据对齐

pandas可以对不同索引的对象进行算术运算,如果存在不同的索引对,结果的索引就是该索引对的并集。

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

s1+s2
# 返回值:
a    7.0
b    NaN
c    NaN
d    9.0
e    9.0
g    NaN
m    NaN
n    NaN
dtype: float64

自动的数据对齐操作在不重叠的索引处引入NaN。缺失值会在算术运算过程中传播。简单的讲就是:两个对象相同的索引进行运算, 不同的索引置NAN,并取并集。

2.2 DataFrame

DataFrame 数据对齐的操作, 会同时发生在行和列上, 即:行索引和列索引都行同时才进行运算,不同的置NAN,然后取并集。

df1 = DataFrame(np.arange(9).reshape((3,3)),index=['a','b','c'], columns=['A','B','C'])
df2 = DataFrame(np.arange(16).reshape((4,4)),index=['a','e','c','m'], columns=['A','E','C','M'])
df1+df2  # 两值想乘同样如此
# 返回值:
    A   B   C   E   M
a   0.0 NaN 4.0 NaN NaN
b   NaN NaN NaN NaN NaN
c   14.0NaN 18. NaN NaN
e   NaN NaN NaN NaN NaN
m   NaN NaN NaN NaN NaN
2.3 在算术方法中进行填充
df1.add(df2,fill_value=0)  # 其他的运算方法: sub(-)  div(/)  mul(*)
# 返回值:
#   A        B       C      E       M
# a 0.0     1.0     4.0     1.0    3.0
# b 3.0     4.0     5.0     NaN     NaN
# c 14.0    7.0     18.0    9.0    11.0
# e 4.0     NaN     6.0     5.0     7.0
# m 12.0    NaN     14.0    13.0    15.0

通过这个例子可以看出:
1.将两个对象取并集, 行、列索引相同时,进行相应的运算;
2.其中的一个对象里边没有值时,以fill_value的值进行填充, 然后进行运算;
3.当两个对象中都没有值时,则置NAN;

2.4 DataFrame 和 Series中之间的运算(要区别于矩阵运算)
df3 =DataFrame(np.arange(16).reshape((4,4)),index=['a','e','c','m'], columns=['A','E','C','M'])
# 值:
#     A   E   C   M
# a   0   1   2   3
# e   4   5   6   7
# c   8   9  10  11
# m  12  13  14  15

ser = df3.iloc[0]
# 值
# A    0
# E    1
# C    2
# M    3

df3 - ser
#返回值
#   A   E   C   M
# a 0   0   0   0
# e 4   4   4   4
# c 8   8   8   8
# m 12  12  12  12


ser2 = Series(range(3),index=['E','M','F'])
print (ser2)
# 返回值
# E    0
# M    1
# F    2

df3-ser2
# 返回值
#     A   C     E   F     M
# a NaN NaN   1.0 NaN   2.0
# e NaN NaN   5.0 NaN   6.0
# c NaN NaN   9.0 NaN  10.0
# m NaN NaN  13.0 NaN  14.0

df3.sub(ser2, axis=0)
# 返回值
# A E   C   M
# E NaN NaN NaN NaN
# F NaN NaN NaN NaN
# M NaN NaN NaN NaN
# a NaN NaN NaN NaN
# c NaN NaN NaN NaN
# e NaN NaN NaN NaN
# m NaN NaN NaN NaN

通过以上的例子可以看出:
1.DataFrame和Series之间的算术运算,会将Series的索引匹配到DataFrame的列(Series本身就是一维数据), 然后对DataFrame的每行数据进行运算。

  1. 当其中一个对象的索引不存在时时,则置NAN。
  2. 可以通过算术方法改变广播的轴。

值得注意的是:

  1. 书中的例子 ix方法已经不推荐使用,需要用iloc 或者loc进行替代。
  2. 算术方法中fill_value会报错。

3.函数的应用和映射

df3
# 返回值
#   A   E   C   M
# a 0   1   2   3
# e 4   5   6   7
# c 8   9   10  11
# m 12  13  14  15


df3.apply(lambda x:x.max()-x.min()) # 对于轴级别, 默认为0轴
# 返回值
# A    12
# E    12
# C    12
# M    12
# dtype: int64

df3.apply(lambda x:x.max()-x.min(), axis=1)  # 对于轴级别,指定为1轴
# 返回值
# a    3
# e    3
# c    3
# m    3
# dtype: int64

df3.applymap(lambda x:x+1) # 元素级
# 返回值
#   A   E   C   M
# a 1   2   3   4
# e 5   6   7   8
# c 9   10  11  12
# m 13  14  15  16

注意区别python中的map, Series中的map。

总注:本章的笔记比较零碎。要对比于pyhton中的list,numpy中array进行学习效果更佳。再强调一点:pandas中, 已经不建议始用ix, 建议改成iloc以及loc的始用。

本人水平有限, 如有错误欢迎提出指正!如有参考, 请注明出处!!禁止抄袭!

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

推荐阅读更多精彩内容