Pandas包

Pandas.png

一、两个基本数据结构

Series和DataFrame。其中Series的一维的,DateFrame是多维的。

二、与Numpy的不同

  1. Numpy数组中的数据类型是同质的;df中数据类型可以是不同的。
  2. df有索引的对象。index在pd中是一种数据类型。

三、基本属性

index:表示索引
columns:表示列名,其实也是一种索引对象。一般函数默认是按行索引,除非传入index=columns或者axis=1的参数

四、索引对象

  • 在Series中,只有index索引。
  • 在DF中,有index和columns两种索引。
  • 索引是一种对象,可以在生成时显式地生成,也可以在生成后进行删除增加。但是数组的索引不可以更改。
  • 索引对象可以通过obj.index和obj.columns进行访问
  • 标签可以重复

五、Series介绍

介绍:单维数组型对象

1.查看索引和值

series_obj.index
series_obj.values

2.生成

a. 传入序列:pd.Series(序列,index=序列),可以指定index
b. 通过字典生成,这样index就是字典键,values是对应的键值

六、DataFrame

1.生成

a. 字典,pd.DataFrame(字典,columns=【可以指定列的顺序】)
b. 嵌套字典,即字典的键值还是字典,通过两个字典的键来确定索引
c. 2维数组
d. 多维列表

2.修改和增加

  • 与字典的操作类似,通过df[索引]=数据来增加或者修改数据。
  • 通过索引某一列或者某一行,使之等于某个标量或者向量来更改值。如果将Series类型的值赋值给了某一列,则会按照相同的索引来赋值。空缺的地方会使用缺失值补全。

3.删除

与字典的操作类似,del df[索引]
注意:从df种选取的列是视图,做修改也会改变原数据。

七、索引相关操作

1.重建索引

  • df.reindex(新的索引序列),通过该方法改变数据的排列,如果数据中没有该索引会返回NA。
  • 如果没有显式地说明index=,columns=,则该函数默认改变行索引
  • 该方法可以用df.loc标签索引的方法进行替代,即df.loc[[新的行索引],新的列索引]
  • 可以使用method参数和fill_value参数来进行缺失值的替换

2.删除索引

  • del df[index]删除一列
  • df.drop([索引])返回删除索引后的df

八、索引数据

1.标签索引

  • df['a']
  • df[['a','b']]
  • df[['a':'b']] 注意使用标签时,两边都是闭区间。

2.切片和整数

df[2:4]选择行元素
df[列表]选择列元素

3.布尔值索引

df[series > 2]

4.loc和iloc函数

同时选择行标签和列标签的数据

  • df.loc[行轴标签,列轴标签] 表示使用标签进行索引。其中行标签和列标签可以是值,列表,切片
  • df.iloc[行整数索引,列整数索引],使用方法同上
    注意:使用轴标签时是双闭区间。
  • 如果iloc和loc只有一个参数传进去,默认是行索引

九、算术运算

1.对齐运算

  • 两个df之间运算,按照索引对齐,对不齐的补NA值。
  • 对不齐的也可以使用填充值参数

2.广播运算

df和series之间的运算

  • 默认情况下,df和series间的数学操作会将series的index和df的列匹配,广播到各行。(即各行都进行这个运算,而不单单是一行)
  • 也可以使用行匹配,列广播。可以使用算术方法如add\sub,传入参数axis='index'

十、统计方法

  • df.sum() / mean() / cumsum()默认对行进行运算
  • df.describe()函数对df或者series进行常见的统计变量的描述
  • 协方差,df.corr()/cov() 默认是列与列之间的,传入axis='columns'进行行之间的

十一、排序

  • df.sort_values(by=[排序的索引], ascending=False),可以按照单索引值排序,也可以按多个索引排序
  • df.sort_index(),按照索引进行排序
  • df.rank()函数对某字段进行排序,并返回排序的数组。其中的method参数和sql中的对应关系为:
    method = 'first'按照值在表中出现的顺序排序,相当于sql中的row_number
    method = 'min',如果有两个相同的值,则取较小的排名,排名值不连续,相当于rank();
    method = 'dense',与min类似,但是区别在于排名值是连续的,相当于sql中的dense_rank();
  • pd.cut(bins=int, labels=[]),将序列按照预设值分组,并给每组分配一个等级或者标签。当bins的值为整数时,分成相同长度的数组。
  • pd.qcut(),与cut类似,但是按照分位数进行分割

十二、特殊函数

1.series.unique()返回Series中的唯一值,相当于sql中的distinct
2.series.value_counts()返回每个值出现的次数。
3.series.isin(序列)返回布尔值,表示series是否在序列中的布尔值。
4.series.str,通过Series的str属性,我们可以对文本进行操作,如去除文本中的某些符号,或利用正则表达式进行匹配。字符串的方法同Python内建字符串方法。

十三、分组聚合

  • 使用df.groupby(by=[index])分组,其中index可以是多个索引也可以是单个索引

十四、多表关联

  1. 和数据库中的join用法类似。Pandas中有两种方法:
  • 类方法,pd.merge(df1,df2)
  • 实例方法,df1.merge(right=d2)
    参数描述如下:
    on:当两表中的合并键名相同时,可以用on
    left_on:当两表中的合并键名不同时,左表的键名
    right_on:与上述对应,右边的键名
    how:how='inner';'left';'right';'outer'分别对应sql中的内连接、左连接、右连接和外连接;
df1=pd.DataFrame({'key':['a', 'b', 'c', 'd', 'a', 'b'], 'data1':range(6)})
df2=pd.DataFrame({'key':['a','b','a','b','d'],'data2':range(5)})
print(df1)
print(df2)
--result
  key  data1
0   a      0
1   b      1
2   c      2
3   d      3
4   a      4
5   b      5
  key  data2
0   a      0
1   b      1
2   a      2
3   b      3
4   d      4
--合并
df1.merge(right=df2, on='key',how='inner')
--合并结果
key data1   data2
0   a   0   0
1   a   0   2
2   a   4   0
3   a   4   2
4   b   1   1
5   b   1   3
6   b   5   1
7   b   5   3
8   d   3   4
  1. 按照索引进行合并
    和merge用法相似,但是按照index进行连接;
  2. concat连接法
    用法:pd.concat([df1, df2])
    像sql中的union用法,即将两个表连接到一块,可以上下连接,也可以左右连接。
  • 上下连接,默认上下连接。效果如图:
df1=pd.DataFrame(
{'A':list('abcde'),
'B':list('ghjik')}
)
df2=pd.DataFrame(
{'C':list('abcde'),
'D':list('ghjik')}
)
print(df1)
print(df2)
--result
 A  B
0  a  g
1  b  h
2  c  j
3  d  i
4  e  k
   C  D
0  a  g
1  b  h
2  c  j
3  d  i
4  e  k
pd.concat([df1,df2])
--result
A   B   C   D
0   a   g   NaN NaN
1   b   h   NaN NaN
2   c   j   NaN NaN
3   d   i   NaN NaN
4   e   k   NaN NaN
0   NaN NaN a   g
1   NaN NaN b   h
2   NaN NaN c   j
3   NaN NaN d   i
4   NaN NaN e   k
-左右连接,相当于join,按照索引进行连接
```python
pd.concat([df1,df2],axis=1)
--result
A   B   C   D
0   a   g   a   g
1   b   h   b   h
2   c   j   c   j
3   d   i   d   i
4   e   k   e   k

十五、去除空值和重复值

  1. fillna()使用指定的对象填充;
  2. dropna(),删除所有含有空值的行。若要删除列,则改变axis=1
  3. 查找重复值,df.duplicated() 返回一个布尔数组,如果该数据是在其它行也出现,则返回True。注,如果是查找df的重复,则两行数据完全相等才会返回True,因此一般判断某个字段。

十六、apply函数的用法

apply函数可以让我们自定义函数并运用于整个数组。
eg. 首先通过city字段进行聚合,再找出每个分组内按照positionId排序前两个的数据。
原表如图:


image.png
def fun(x):
    x.sort_values(by=['positionId'],ascending=True)
    return x[:2]
position.groupby(by=['city']).apply(fun)

进行聚类分组,结果如图


image.png
  • 注意:pandas中还有一类函数,agg函数,其与apply函数用法类似,区别在于agg函数中只能使用聚合函数,即返回的值只有一行。
    如图,只返回了聚合后的一行值。


    image.png

十七、数据透视表

通过数据透视表,将数据按照多个维度进行聚类。

  • 语法:df.pivot_table(index, columus, values, aggfunc,margins)
    其中,index和columns分别表示行索引和列索引,values表示聚类的值,aggfunc表示自定义聚类函数,默认使用mean函数,margins表示是否进行求和,默认False,如果是True,则多出求和一栏
    如原数据:


    image.png

    通过数据透视表,查看每个城市不同学历的平均公司编号(?数据源不对,仅为了练习)

position.pivot_table(index=['city','education'],columns='industryField',values='companyId')

返回的结果:


image.png

如果让不同的列使用不同的聚类函数,可以使用aggfunc自定义函数
,使用列表为每个values字段传入不同的函数,注意传入的函数是自定义形式

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

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,561评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,205评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,613评论 2 7