Pandas


Pandas的数据结构


pandas 中使用Series和DataFrame对象存储数据

Series

1.什么是Series

        Series是一种类似与一维数组的对象,由下面两个部分组成:

                values:一组数据(ndarray类型)

                index:相关的数据索引标签

2.如何创建Series

(1) 由列表或numpy数组创建

默认索引为0到N-1的整数型索引

可以通过设置index参数指定索引

特别地,由ndarray创建的是引用,而不是副本。对Series元素的改变也会改变原来的ndarray对象中的元素。(列表没有这种情况)

(2) 由字典创建

3.Series的索引和切片

可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的仍然是一个Series类型)。分为显示索引和隐式索引:

(1) 显式索引:

            使用index中的元素作为索引值

            使用.loc[](推荐)

            注意: 此时是闭区间

(2) 隐式索引:

            使用整数作为索引值

            使用.iloc[](推荐)

            注意: 此时是半开区间

4.Series的基本属性

可以把Series看成一个定长的有序字典

可以通过shape,size,index,values等得到series的属性

可以通过head(),tail()快速查看Series对象的样式

当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况

可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据

5.Series的运算

(1) 适用于numpy的数组运算也适用于Series

(2) Series之间的运算

在运算中自动对齐不同索引的数据

如果索引不对应,则补NaN

注意:要想保留所有的index,则需要使用.add()函数

DataFrame

1.什么是DataFrame

DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。

            行索引:index

            列索引:columns

            值:values(numpy的二维数组)

2.如何创建DataFrame

最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。

此外,DataFrame会自动加上每一行的索引(和Series一样)。

同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

DataFrame属性:values、columns、index、shape

3.DataFrame的索引

(1) 对列进行索引

            通过类似字典的方式

            通过属性的方式

可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。

(2) 对行进行索引

            使用.ix[]来进行行索引

            使用.loc[]加index来进行行索引

            使用.iloc[]加整数来进行行索引

同样返回一个Series,index为原来的columns

(3) 对元素索引的方法

            使用列索引

            使用行索引(iloc[3,1]相当于两个参数;iloc[[3,3]] 里面的[3,3]看做一个参数)

            使用values属性(二维numpy数组)

注意: 直接用中括号时

            索引表示的是列索引

            切片表示的是行切片

4.DataFrame的运算

在运算中自动对齐不同索引的数据

如果索引不对应,则补NaN

(2) Series与DataFrame之间的运算

【重要】

使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)

使用pandas操作函数:

              axis=0:以列为单位操作(参数必须是列),对所有列都有效。

              axis=1:以行为单位操作(参数必须是行),对所有行都有效。


处理丢失数据


None

None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。

object类型的运算要比int类型的运算慢得多

np.nan(NaN)

np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。

但可以使用np.nan*()函数来计算nan,此时视nan为0。

pandas中的None与NaN

1) pandas中None与np.nan都视作np.nan

2) pandas中None与np.nan的操作

判断函数

        isnull()

        notnull()

过滤函数

        dropna(): 过滤丢失数据

        fillna(): 填充丢失数据


层次化索引


1. 创建多层行索引

    1) 隐式构造

            最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组

            Series也可以创建多层索引

    2) 显示构造pd.MultiIndex

使用数组

使用元组

使用product(最简单,推荐使用)

2.多层列索引同上

3.多层索引对象的索引与切片操作

        1)Series的操作

             重要:对于Series来说,直接中括号[]与使用.loc()完全一样,因此,推荐使用中括号索引和切片。

2)DataFrame操作

            (1) 可以直接使用列名称来进行列索引

            (2) 使用行索引需要用ix(),loc()等函数

极其重要:推荐使用loc()函数

注意在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!

4.索引的堆(stack)

unstack()

stack()

小技巧:使用stack()的时候,level等于哪一个,哪一个就消失,出现在行里。

小技巧:使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里

5.聚合操作

平均数,方差,最大值,最小值……


pandas的拼接操作


pandas的拼接分为两种:

        级联:pd.concat, pd.append

        合并:pd.merge, pd.join

pd.concat()

1).简单级联

pandas使用pd.concat函数,与np.concatenate函数类似,只是多了一些参数:

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)

和np.concatenate一样,优先增加行数(默认axis=0),可以通过设置axis来改变级联方向

注意 index在级联时可以重复   也可以选择忽略ignore_index,重新索引

或者使用多层索引 keys   concat([x,y],keys=['x','y'])

2).不匹配级联

不匹配指的是级联的维度的索引不一致。例如纵向级联时列索引不一致,横向级联时行索引不一致

有3种连接方式:

            外连接:补NaN(默认模式)

            内连接:只连接匹配的项

            连接指定轴 join_axes

3) 使用append()函数添加

        级联的使用非常普遍,因此有一个函数append专门用于在后面添加

pd.merge()

merge与concat的区别在于,merge需要依据某一共同的行或列来进行合并

使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并。

注意每一列元素的顺序不要求一致

        1) 一对一合并

        2) 多对一合并

        3) 多对多合并

        4) key的规范化

                使用on=显式指定哪一列为key,当有多个key相同时使用

                使用left_on和right_on指定左右两边的列作为key,当左右两边的key都不想等时使用

        5) 内合并与外合并

                内合并:只保留两者都有的key(默认模式)

                外合并 how='outer':补NaN

                左合并、右合并:how='left',how='right'

        6) 列冲突的解决

                当列冲突时,即有多个列名称相同时,需要使用on=来指定哪一个列作为key,配合suffixes指定冲突列名,可以使用suffixes=自己指定后缀

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

推荐阅读更多精彩内容