[Pandas 学习笔记] - No.1 pandas学习笔记
pandas学习笔记
pandas是基于numpy开发出的数据分析包,用于高效地操作大型数据集。pandas的数据结构有三种 分别为 series,dataframe和panel,对应一维,二维,三维数据。 其中datafram最为常用,我们仅对dataframe进行记录。
dataframe其实就是一个形似数据库中的table一样的数据结构,我们可以从列表,字典,series和numpy ndarray和 dataframe创建df;同时还可以从csv文件来读入数据创建df
# pandas中的DataFrame可以使用以下构造函数创建
pandas.DataFrame( data, index, columns, dtype, copy)
编号 | 参数 | 描述 |
---|---|---|
1 | data | 数据采取各种形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame |
2 | index | 行标签,默认是从0开始的整数 |
3 | columns | 列表千年,即字段名,默认是从0开始的整数 |
4 | dtype | 每一列的数据类型 |
5 | copy |
如果默认值为False ,则此命令(或任何它)用于复制数据
|
pandas数据表创建
import pandas as pd
import numpy as np# 使用列表列表(列表的元素是一个列表)来创建df
data = [['Alex',12],['Bob',15],['Jack',18]]
df = pd.DataFrame(data)
print (df)'''0 1
0 Alex 12
1 Bob 15
2 Jack 18
'''
由结果可知,如果我们不添加列名的话,默认是从0开始标记列名,这里我们指明列名,数据类型。另外,我们还可以设置特殊的index
data = [['Alex',12],['Bob',15],['Jack',18]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype='float')
print (df)'''Name Age
0 Alex 12.0
1 Bob 15.0
2 Jack 18.0
'''# 我们还可以使用字典列表来创建一个df,从而不用设置columns
data = [{'Name': 'Alex', 'Age': 12},{'Name': 'Bob', 'Age': 15},{'Name': 'Jack', 'Age': 18,'Phone':'521366'}]
df = pd.DataFrame(data)
print(df)'''Age Name Phone
0 12 Alex NaN
1 15 Bob NaN
2 18 Jack 521366
'''
我们会发现,使用字典列表的方式来创建,如果有的字典中缺少某个字段 那么会自动填充NaN
上述的方法都是由一个list来创建dataframe,list中每个元素代表一行的数据;
我们还可以使用字典 创建整列数据
data = {'Name':['Alex','Bob','Jack'],'Age':[12,15,18]}
df = pd.DataFrame(data,index=['rank1','rank2','rank3'])
print(df)'''Age Name
rank1 12 Alex
rank2 15 Bob
rank3 18 Jack
'''
除此之外,我们还可以使用numpy和读取csv数据的方式创建dataframe
# 使用numpy生成dataframe
import numpy as np
data = np.random.randn(5,5)df = pd.DataFrame(data,columns=['A','B','C','D','E'])
print(df)'''A B C D E
0 -0.372475 0.450400 0.742329 -1.037012 -0.902100
1 0.696321 -1.055079 -2.263853 0.941368 0.376098
2 0.721607 -0.178860 0.413946 -0.509012 -0.297089
3 0.498155 -1.236906 0.216542 -1.110133 -1.033379
4 -1.199099 -1.613378 -0.370484 -0.354009 0.125048
'''
#从csv文件读取数据 添加到df
df = pd.read_csv("titanic.csv", header=0)
print(df.head(10)) #打印前十行,结果太多不再展示
pandas 数据表筛选,查询排序
pandas的排序主要有两种排序:
- 对index进行排序(包括对行index排序和列index排序)
- 对某一列值进行排序:(基于某一列的值交换行)
# index排序
unsort_df = pd.DataFrame(np.arange(25).reshape(5,5),index = [4,0,2,1,3],columns=['B','A','E','C','D'])
print(unsort_df)'''B A E C D
4 0 1 2 3 4
0 5 6 7 8 9
2 10 11 12 13 14
1 15 16 17 18 19
3 20 21 22 23 24
'''
对行index进行排序:
sort_df = unsort_df.sort_index(axis=0,ascending=True) # 按照升序排列
print(sort_df)'''B A E C D
0 5 6 7 8 9
1 15 16 17 18 19
2 10 11 12 13 14
3 20 21 22 23 24
4 0 1 2 3 4
'''
对列标签进行排序:
sort_df = unsort_df.sort_index(axis=1)
print(sort_df)'''A B C D E
4 1 0 3 4 2
0 6 5 8 9 7
2 11 10 13 14 12
1 16 15 18 19 17
3 21 20 23 24 22
'''
对某一列的值进行排序:
# 对某一列的值进行排序
unsort_df = pd.DataFrame(np.random.rand(5,5),columns=['A','B','C','D','E'])
print(unsort_df)'''A B C D E
0 0.064110 0.261228 0.407898 0.442963 0.543346
1 0.108448 0.860408 0.127829 0.081763 0.122567
2 0.102532 0.575612 0.406204 0.343808 0.787604
3 0.336907 0.315543 0.880459 0.981245 0.074163
4 0.806219 0.922854 0.649067 0.335794 0.271572
'''sort_df = unsort_df.sort_values(by='A',kind='mergesort') # 对第一列A进行排序,默认为升序
print(sort_df)'''A B C D E
0 0.303920 0.558314 0.767881 0.172027 0.635556
3 0.404746 0.834687 0.695462 0.747880 0.258342
2 0.409437 0.427695 0.217155 0.041271 0.572030
4 0.599488 0.592189 0.812071 0.284848 0.767630
1 0.864761 0.123731 0.807521 0.071350 0.356040
'''
在上面的排序函数 sort_values()中,有by和kind两个字段;by设置需要排序的列,kind设置所使用的排序算法。一共有三种算法:mergesort
,heapsort
和quicksort
;推荐使用mergesort
算法
pandas索引
dataframe的索引中,有三个函数可以用于选择数据
- loc(): 使用index来选择数据 (based indexing)
- iloc():使用整数索引来选择数据 (positional indexing)
- ix(): iloc()和loc()的混合 (已废弃,不推荐使用)
我们分别使用上面的三种索引,来选择行数据,列数据:
使用loc():
df = pd.DataFrame(np.random.rand(5,5),columns=['A','B','C','D','E'],index=['r1','r2','r3','r4','r5'])
print(df)'''A B C D E
r1 0.319453 0.719874 0.836147 0.977027 0.796801
r2 0.195108 0.688970 0.756126 0.065059 0.565333
r3 0.365706 0.648914 0.579140 0.660109 0.054941
r4 0.406658 0.449347 0.772691 0.600538 0.144391
r5 0.489836 0.647537 0.034738 0.051654 0.826314
'''#获取列数据
# 获取指定单列
print(df.loc[:,'A']) '''
r1 0.560104
r2 0.762691
r3 0.517329
r4 0.976693
r5 0.859421
Name: A, dtype: float64
'''
#获取指定列 多列
print(df.loc[:,['C','E']]) # 获取 'C','E'两列
'''C E
r1 0.835193 0.025310
r2 0.927207 0.647369
r3 0.165869 0.081265
r4 0.455334 0.322755
r5 0.417843 0.629403
'''
print(df.loc[:,'C':'E']) # 获取 'C','D','E'三列
'''C D E
r1 0.835193 0.082388 0.025310
r2 0.927207 0.806717 0.647369
r3 0.165869 0.046043 0.081265
r4 0.455334 0.916932 0.322755
r5 0.417843 0.015367 0.629403
'''# 获取行数据
# 获取'r2' 行
print(df.loc['r2',:])
'''
A 0.762691
B 0.895068
C 0.927207
D 0.806717
E 0.647369
Name: r2, dtype: float64
'''# 获取'r2','r3','r4' 三行
print(df.loc['r2':'r4',:]) #获取行 r2-r4
'''A B C D E
r2 0.762691 0.895068 0.927207 0.806717 0.647369
r3 0.517329 0.267965 0.165869 0.046043 0.081265
r4 0.976693 0.365548 0.455334 0.916932 0.322755
'''# 获取'r2','r4'两行
print(df.loc[['r2','r4'],:]) #获取行 r2,r4
'''A B C D E
r2 0.762691 0.895068 0.927207 0.806717 0.647369
r4 0.976693 0.365548 0.455334 0.916932 0.322755
'''
另外,在我们进行索引的时候,就像python中的切片一样,如果是针对行的索引,那么后边的,:
是可以省略不写的。
iloc():
# iloc方法 使用整数切片(数字为具体的行号)
# 获取指定行print(df)'''A B C D E
r1 0.319453 0.719874 0.836147 0.977027 0.796801
r2 0.195108 0.688970 0.756126 0.065059 0.565333
r3 0.365706 0.648914 0.579140 0.660109 0.054941
r4 0.406658 0.449347 0.772691 0.600538 0.144391
r5 0.489836 0.647537 0.034738 0.051654 0.826314
'''print(df.iloc[2]) # 获取第三行
'''
A 0.365706
B 0.648914
C 0.579140
D 0.660109
E 0.054941
Name: r3, dtype: float64
'''print(df.iloc[2:4]) # 获取第三,第四行
'''A B C D E
r3 0.365706 0.648914 0.579140 0.660109 0.054941
r4 0.406658 0.449347 0.772691 0.600538 0.144391
'''
print(df.iloc[[0,2,4],:]) #获取0,2,4三行
'''A B C D E
r1 0.319453 0.719874 0.836147 0.977027 0.796801
r3 0.365706 0.648914 0.579140 0.660109 0.054941
r5 0.489836 0.647537 0.034738 0.051654 0.826314
'''#获取列数据
# 获取指定列 结果不再展示
print(df.iloc[:,2]) #获取第三列
print(df.iloc[:,2:5]) #获取第三,第四列
print(df.iloc[:,[0,2,4]]) #获取0,2,4三列
ix():
# ix方法
print(df.ix[0:3,['A','B','E']])
'''A B E
r1 0.319453 0.719874 0.796801
r2 0.195108 0.688970 0.565333
r3 0.365706 0.648914 0.054941
'''
ix()方法是上述两个方法的结合,即既可以使用数字,也可以使用标签。但是pandas中不再推荐使用
pandas 对数据表进行操作
在操作中,最简单的就是对数据进行增删:
df = pd.DataFrame(np.random.rand(3,3),columns=['A','B','C'],index=['r1','r2','r3'])
print(df)
'''A B C
r1 0.653356 0.960060 0.552862
r2 0.774473 0.272467 0.147769
r3 0.049872 0.943801 0.965931
'''# 增删列
# 如果想要仅仅在最后添加一列,,方法如下
df['new_col1'] = None
print(df)
'''A B C new_col1
r1 0.653356 0.960060 0.552862 None
r2 0.774473 0.272467 0.147769 None
r3 0.049872 0.943801 0.965931 None
'''df['new_col2'] = 0.5
print(df)
'''A B C new_col1 new_col2
r1 0.653356 0.960060 0.552862 None 0.5
r2 0.774473 0.272467 0.147769 None 0.5
r3 0.049872 0.943801 0.965931 None 0.5
'''# 删除列
df.drop(['new_col1','new_col2'],axis=1,inplace=True)
print(df)
'''A B C
r1 0.653356 0.960060 0.552862
r2 0.774473 0.272467 0.147769
r3 0.049872 0.943801 0.965931
'''
如果想增加多列,方法如下:
# 在最后添加多列:
df2 = pd.DataFrame(np.random.randn(3,2),columns = ['add1','add2'],index=['r1','r2','r3'])
print(df2)
'''add1 add2
r1 2.050387 0.471776
r2 0.804328 -0.562791
r3 1.140708 -1.477404
'''df3 = pd.DataFrame(np.random.randn(2,3),columns = ['A','B','C'])
print(df3)
'''A B C
0 -0.729599 0.154387 -0.325885
1 0.378690 0.204472 -0.374436
'''new_df = pd.concat([df,df2],axis=1)
print(new_df)
'''A B C add1 add2
r1 0.653356 0.960060 0.552862 2.050387 0.471776
r2 0.774473 0.272467 0.147769 0.804328 -0.562791
r3 0.049872 0.943801 0.965931 1.140708 -1.477404
'''
pd.concat()用于连接dataframe,其中axis属性代表拼接方向;如果axis=0代表沿行方向拼接,axis=1代表沿列方向拼接
# 沿行方向拼接df
new_df = pd.concat([df,df3],axis=0)
print(new_df)
'''A B C
r1 0.653356 0.960060 0.552862
r2 0.774473 0.272467 0.147769
r3 0.049872 0.943801 0.965931
0 -0.729599 0.154387 -0.325885
1 0.378690 0.204472 -0.374436
'''
# 按照标签删除行
new_df.drop(['r1','r3'], axis=0,inplace=True)
print(new_df)
'''A B C
r2 0.774473 0.272467 0.147769
0 -0.729599 0.154387 -0.325885
1 0.378690 0.204472 -0.374436
'''#增加一个新的行
new_df = new_df.append(pd.Series([0,1,2],index=['A','B','C']),ignore_index=True)
print(new_df)
'''A B C
0 0.774473 0.272467 0.147769
1 -0.729599 0.154387 -0.325885
2 0.378690 0.204472 -0.374436
3 0.000000 1.000000 2.000000
'''
dataframe 提供了一系列函数对数据进行统计分析:
df = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print(df)'''a b c d e
0 -0.123195 0.904182 1.954444 -0.161568 -1.452412
1 0.020782 -0.816824 0.676511 1.370532 0.883918
2 -1.196381 2.156407 1.325780 -0.107228 -0.060447
3 -1.413799 -0.882798 0.284797 0.731573 0.210051
4 -0.170625 -1.391171 -0.139347 1.059765 1.102944
5 -1.207354 -0.893137 0.928643 0.070762 1.007776
6 0.603928 -2.299983 2.158155 0.127855 0.011646
7 -0.735168 -1.144970 -0.815661 -0.112566 -0.942321
8 1.582841 -1.520188 -0.463830 1.045699 -0.064077
9 -1.341750 -0.022456 -1.641289 1.708361 -0.501614
'''
列之间协方差:
# 列与列之间的协方差
print(df.cov())
print("\na,e协方差:{}\n".format(df['a'].cov(df['e'])))
'''a b c d e
a 0.950983 -0.602311 0.195242 0.075699 -0.009229
b -0.602311 1.673961 0.269066 -0.231610 -0.389904
c 0.195242 0.269066 1.489807 -0.530289 0.009390
d 0.075699 -0.231610 -0.530289 0.481481 0.213109
e -0.009229 -0.389904 0.009390 0.213109 0.701188a,e协方差:-0.009229160115646852'''
列之间相关性:
# 列与列相关性:
print (df.corr())
print("\na,e相关性:{}\n".format(df['a'].corr(df['e'])))
'''a b c d e
a 1.000000 -0.477377 0.164029 0.111870 -0.011302
b -0.477377 1.000000 0.170381 -0.257986 -0.359889
c 0.164029 0.170381 1.000000 -0.626121 0.009187
d 0.111870 -0.257986 -0.626121 1.000000 0.366771
e -0.011302 -0.359889 0.009187 0.366771 1.000000a,e相关性:-0.011302084979431462
'''
一些简单统计指标,结果不再展示:
# 某一列 和,最大值,最小值,均值,方差
print(df['a'].sum())
print(df['a'].max())
print(df['a'].min())
print(df['a'].mean())
print(df['a'].var())
pandas数据查询:
dataframe还可以像SQL一样进行查询使用
# 首先创建一个数据表
data_dict = {'Name':['Alex','Bob','Conan','Jakc'],'Age':[22,25,26,23],'Salary':[2100,2300,2500,4100],'Department':['Sale','Tech','Sale','Support']}
df = pd.DataFrame(data_dict,columns=['Name','Age','Salary','Department'])
print(df)
'''Name Age Salary Department
0 Alex 22 2100 Sale
1 Bob 25 2300 Tech
2 Conan 26 2500 Sale
3 Jakc 23 4100 Support
'''# 查看公司所有人员 姓名及年龄
print(df[['Name','Age']])
'''Name Age
0 Alex 22
1 Bob 25
2 Conan 26
3 Jakc 23
'''# 查看年龄大于等于25的人员名单
print(df[df['Age']>=25]) #类似numpy中的布尔索引获取值
'''Name Age Salary Department
1 Bob 25 2300 Tech
2 Conan 26 2500 Sale
'''#获取工资前两名的员工信息
print(df.sort_values('Salary',ascending=False).head(2))
'''Name Age Salary Department
3 Jakc 23 4100 Support
2 Conan 26 2500 Sale
'''#获取每个部门的平均工资
print(df.groupby('Department')['Salary'].mean())'''
Department
Sale 2300
Support 4100
Tech 2300
Name: Salary, dtype: int64
'''
[Pandas 学习笔记] - No.1 pandas学习笔记相关推荐
- python数据挖掘学习笔记】十.Pandas、Matplotlib、PCA绘图实用代码补充
#2018-03-23 18:56:38 March Friday the 12 week, the 082 day SZ SSMR https://blog.csdn.net/eastmount/a ...
- 免费学习机器学习和深度学习的源码、学习笔记和框架分享
机器学习和深度学习的免费学习源码.学习笔记和框架分享 python笔记 源码 python导入模块的的几种方式 在python中,字典按值排序 python中set的基本常用方法 python取出fr ...
- 强化学习笔记(4)-深度Q学习
以下为学习<强化学习:原理与python实现>这本书的笔记. 在之前学习到的强度学习方法中,每次更新价值函数只更新某个状态动作对的价值估计.但是有些情况下状态动作对的数量非常大,不可能对所 ...
- [学习笔记] [机器学习] 7. 集成学习(Bagging、随机森林、Boosting、GBDT)
视频链接 数据集下载地址:无需下载 1. 集成学习算法简介 学习目标: 了解什么是集成学习 知道机器学习中的两个核心任务 了解集成学习中的 Boosting 和 Bagging 1.1 什么是集成学习 ...
- 计算机基础与应用(上)笔记总结,计算机基础学习心得体会范文(通用3篇)
计算机基础学习心得体会范文(通用3篇) 当我们对人生或者事物有了新的思考时,好好地写一份心得体会,这样可以记录我们的思想活动.那么要如何写呢?以下是小编精心整理的计算机基础学习心得体会范文(通用3篇) ...
- 学习 慕课网 PHP工程师学习计划--我的笔记汇总
为了进一步学习PHP,本周我选定了慕课网的PHP工程师学习计划, 从今天2015-07-06 10:24:47开始从头学习:计划本周尽快学习完成本课程,谨此作为笔记. 有个好的学习计划和思路非常非常重 ...
- Hadoop学习笔记—18.Sqoop框架学习
Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...
- JavaScript学习笔记(十)——学习心得与经验小结
JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...
- 强化学习笔记4:强化学习分类
1 model-free & model-based model-based(有模型) RL agent,它通过学习环境的状态转移来采取动作. model-free(免模型) RL agent ...
最新文章
- ABC Perl Programing - 回 2gua 短消息
- 使用pyinstaller打包django3.2
- 配置 docker0 网桥
- 图像处理的交并比(IoU)
- bashrc,bash_profile和/etc/profile
- WinCE驱动开发问题精华集锦
- 2017《时间的朋友》思维导图(脑图整理版)
- 模拟器与真机的程序差别J2ME
- 【2012百度之星资格赛】J:百度的新大厦
- 复合选择器-并集选择器(HTML、CSS)
- dotproject问题。
- ps自带磨皮滤镜插件Portraiture3PS版
- Mac使用——MongoDB的下载和Compass可视化工具,以及安装过程
- 什么品牌蓝牙耳机音质好?通话质量好蓝牙耳机
- linux光盘游戏,Linux下五个好玩的即时战略游戏
- 【Leetcode 刷题题解】python语言+最优美解答+由易到难
- 国产UOS系统之——安装N卡驱动(多屏显示)
- golang_逃逸分析
- python画气泡图_用python 来绘制气泡图的简单技巧
- 002:Python爬虫Urllib库全面分析