pandas 提取某几列_【科学计算工具二】初识Pandas

9693b9a801b25f70a0e3af1416ef3585.png

和Numpy最大的不同,Pandas的数据有对应的index。

acf80971ee63b07a6afae92044add9a6.png

一、Series数组

Series 是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为索引

  • 创建Series数组

fef54b4c3466fac31fd1ed42612a04fa.png
# 创建 Series 数据类型有三种方法
#1. 从列表创建 Series
arr = [0, 1, 2, 3, 4]
s1 = pd.Series(arr) # 如果不指定索引,则默认从 0 开始
print(s1)输出结果:
0    0
1    1
2    2
3    3
4    4
dtype: int64————————————————————————————————————————————————
#2. 从加入索引创建 Series
index = ['a' , 'b' , 'c' , 'd' , 'e']
n=[1,2,3,4,5]
s2 = pd.Series(n, index=index)
print(s2)输出结果:
a    1
b    2
c    3
d    4
e    5
dtype: int64——————————————————————————————————————————————————
#3.从字典创建 Series
d={'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
s3=pd.Series(d)
print(s3)输出结果:
a    1
b    2
c    3
d    4
e    5
dtype: int64
  • 查看Series的数据,数据类型 values,index,dtype

3077183ea73f74146fe422066ddce35a.png
  • 查看Series的描述性信息 describe()

c638be40981ebee41ecb8a2b79c7dbdc.png
  • 索引操作
index = ['a' , 'b' , 'c' , 'd' , 'e']
n=[1,2,3,4,5]
s2 = pd.Series(n, index=index)输出:
a    1
b    2
c    3
d    4
e    5
dtype: int64——————————————————————————————————————————————————
# 1、位置下标,类似序列
print(s[0])
print(s[3]输出:
1
4——————————————————————————————————————————————————
# 2、标签索引,方法类似下标索引,用[]表示,内写上index,注意index是字符串。
print(s['a'])
print(s[['b','e']])  #如果需要选择多个标签的值,用[[]]来表示(相当于[]中包含一个列表)输出结果:
1b    2
e    5——————————————————————————————————————————————————
# 3、切片索引
print(s[1:3])
print(s['a':'c'])输出结果:
b    2
c    3
dtype: int64a    1
b    2
c    3
dtype: int64——————————————————————————————————————————————————
#4、布尔型索引
index = ['a' , 'b' , 'c' , 'd' , 'e']
n=[20,2,13,None,7]
s = pd.Series(n, index=index)
print(s)输出结果:
a    20.0
b     2.0
c    13.0
d     NaN
e     7.0
dtype: float64----------------------
bls = s>10
print(bls)
print(s[s>10])
# 数组做判断之后,返回的是一个由布尔值组成的新的数组
# 以判断条件作为索引,只输出True部分数值输出结果:
a     True
b    False
c     True
d    False
e    False
dtype: boola    20.0
c    13.0
dtype: float64----------------------
bls = s.notnull()
print(bls)
print(s[bls])
# .isnull() / .notnull() 判断是否为空值,返回的也是一个由布尔值组成的新的数组(None代表空值,NaN代表有问题的数值,两个都会识别为空值)输出结果:
a     True
b     True
c     True
d    False
e     True
dtype: boola    20.0
b     2.0
c    13.0
e     7.0
dtype: float64
  • Series的基本操作

(1)# 数据查看 .head() / .tail() 查看前5行数据,和后5行数据

0e7504f03582e4060bef26f5b8fec183.png

二、Dataframe数组

"二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。

  • 创建DataFrame数组
# Dataframe 数据结构
# Dataframe是一个表格型的数据结构,“带有标签的二维数组”。
# Dataframe带有index(行标签)和columns(列标签)#导入pandas包
import pandas as pd#第1步:定义一个字典,映射列名与对应列的值
salesDict={'购药时间':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],'社保卡号':['001616528','001616528','0012602828'],'商品编码':[236701,236701,236701],'商品名称':['强力VC银翘片','清热解毒口服液','感康'],'销售数量':[6,1,2],'应收金额':[82.8,28,16.8],'实收金额':[69,24.64,15]
}#导入有序字典
from collections import OrderedDict
#定义一个有序字典
salesOrderDict=OrderedDict(salesDict)#定义数据框:传入字典,列名
salesDf = pd.DataFrame(salesOrderDict)
print(salesDf)

结果输出:

5b73e682ddc142eba5aab9d69a84aa10.png
  • 查看行,列标签
print(salesDf.index)   #查看DataFrame的行标签
print(salesDf.columns)   #查看DataFrame的列标签输出结果:
RangeIndex(start=0, stop=3, step=1)
Index(['购药时间', '社保卡号', '商品编码', '商品名称', '销售数量', '应收金额', '实收金额'], dtype='object')
  • 查看每一列数据的类型

6688542079995b10717d1083ade10c0b.png
  • 查看描述性信息

a11b3da7dd05d44bd1ca8b7fbce8c989.png
  • 数据查询
'''
loc属性用于根据索引index获取
''

1) 查询某一行的元素

8e387d95c700874d54ca12fc926c6327.png

2)查询某行特定列的元素

6218e78e16516bca6429dd6e7375b336.png
'''
iloc属性用于根据位置获取值,索引值从0开始
'''

1)查询某一行的数据

320d7bf12852e6b235b0069f9c5d4292.png

2)查询某行特定列的元素

aaf9b1de9f4813ecba763d9e2346b9b4.png

【loc和iloc的区别】

从以上的案列中有点难理解这两种取值的函数有什么不同,下面换个例子详细说明

# loc 和 iloc 的区别
#1. 利用loc、iloc提取行数据import numpy as np
import pandas as pd
#创建一个Dataframe
data=pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('ABCD'))In[1]: data
Out[1]: A   B   C   D
a   0    1    2   3
b   4    5    6   7
c   8    9   10  11
d  12   13   14  15#取索引为'a'的行
In[2]: data.loc['a']   # loc根据index值获取
Out[2]:
A    0
B    1
C    2
D    3In[3]: data.iloc[0]   #iloc根据下位置下标获取
Out[3]:
A    0
B    1
C    2
D    3
#取第一行数据,索引为'a'的行就是第一行,所以结果相同
# 2. 利用loc、iloc提取列数据In[4]:data.loc[:,['A']]    #取'A'列所有行,多取几列格式为 data.loc[:,['A','B']]
Out[4]: A
a   0
b   4
c   8
d  12In[5]:data.iloc[:,[0]]    #取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
Out[5]: A
a   0
b   4
c   8
d  12
# 3.利用loc、iloc提取指定行、指定列数据In[6]:data.loc[['a','b'],['A','B']]   #提取index为'a','b',列名为'A','B'中的数据
Out[6]: A  B
a  0  1
b  4  5In[7]:data.iloc[[0,1],[0,1]]       #提取第0、1行,第0、1列中的数据
Out[7]: A  B
a  0  1
b  4  5

总结:涉及到具体行或列的名字,用loc,只看位置,用iloc

'''
通过切片功能获取元素(这个方法也很常用)
'''
  • 指定列名获取

c0b13c6098859a305aba6129c778d9ed.png
  • 切片索引获取某个范围内的信息

9e47de41314b3eee4a7ea7d7030808af.png
'''
复杂数据框查询数据,通过条件判断筛选
'''

7ab1ea9521122d90bfbd07ec07b7c4c1.png
  • 新增列

d1f939faec3eb2edef6ebae77c65733d.png
  • 删除行 / 列 del / drop()
# del 语句删除 ——删除列

a09e6bfec5a29b95fc24d77b7f5ca94d.png
# drop() #默认删除行,inplace=False → 删除后生成新的数据,不改变原数据

3b412771b9b291363a6bf5803ec69e6c.png
# drop()改变参数axis = 1 ,也可以删除列,inplace=True,原数据会被改变

a803d2f94f6a7129e7a02ef1702fc9b1.png
  • 排序
# 排序1 - 按值排序 .sort_values,参数 ascending = True →升序;反之,降序
同样适用于Series

d33174897de105d0c9a2ce6eeb4bcb9b.png
# 排序2 - 索引排序 .sort_index
# 按照index排序
# 默认 ascending=True (升序), inplace=False(不修改原数据,返回新的数据)

7ba5faf4575d5527effa9aa180d14334.png
  • 读取外部文件,很多时候需要导入外部的excel,csv,图片等格式的文件进行数据处理

关于这一点最重要的是主要外部文件和本身python工程文件的相对位置,位置不对,python就不能正确找到。

#读取Ecxcel数据
fileNameStr='./朝阳医院2018年销售数据.xlsx'
xls = pd.ExcelFile(fileNameStr)
salesDf = xls.parse('Sheet1')
  • 数值计算和统计方法
  1. 求均值 .mean()
按照列进行计算只统计数字列
可以通过索引单独统计一列

26e79fb6c75ec6028d8601ac667da2b3.png

2. 统计数量 .count() →统计非Na值的数量

按照列进行计算
可以通过索引单独统计一列

3a730948b78fd17de439701f4332cdfd.png

3. 其他同理

  • 求和: df.sum()
  • 求最大最小值: df.min() / df.max()
  • 求中位数: df.median()
  • 求标准差,方差: df.std() / df.var()
  • 去重 .duplicated()
#  Series 和 Dataframe都可以用这个函数#1、Series
#导包
import pandas as pds = pd.Series([1,1,1,1,2,2,2,3,4,5,5,5,5])
print(s.duplicated())
print(s[s.duplicated() == False])
# 判断是否重复
# 通过布尔判断,得到不重复的值输出结果:
0     False
1      True
2      True
3      True
4     False
5      True
6      True
7     False
8     False
9     False
10     True
11     True
12     True
dtype: bool0    1
4    2
7    3
8    4
9    5
dtype: int64—————————————————————————————————————————————————
s = pd.Series([1,1,1,1,2,2,2,3,4,5,5,5,5])
s_re = s.drop_duplicates()
print(s)
print(s_re)
# drop.duplicates移除重复
# inplace参数:是否替换原值,默认False,不替换。输出结果:
0     1
1     1
2     1
3     1
4     2
5     2
6     2
7     3
8     4
9     5
10    5
11    5
12    5
dtype: int640    1
4    2
7    3
8    4
9    5
dtype: int64——————————————————————————————————————————————————
df = pd.DataFrame({'key1':['a','a',3,4,5],'key2':['a','a','b','b','c']})
print(df.duplicated())
print(df['key2'].duplicated())
# Dataframe中使用duplicated输出结果:key1 key2
0    a    a
1    a    a
2    3    b
3    4    b
4    5    c
0    False
1     True
2    False
3    False
4    False
dtype: bool
0    False
1     True
2    False
3     True
4    False
Name: key2, dtype: bool
#然后再利用布尔型索引方式去除重复值即可。

数据分析中pandas可能用到的知识点汇总至此,在学习的过程中会不断补充... ...

acae05bd4a784f122c7351535116c69d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发物体识别桌、_科研人员开发突破性的技术,允许盲人识别形状和物体

一项令人难以置信的新技术正在让失明人士有能力识别形状和物体,而这些形状和物体都是在他们的大脑上“画出来”的。一篇描述该技术的研究论文刚刚发表在《细胞》杂志上,正如ScienceNews报道的那样,这可能是向盲人提供一种视觉上与周围世界互动…

spring webflow getting start

概述 很多时候,我们写的流程都嵌在一大堆代码中,没有办法直观的管理。而spring webflow可以将流程抽出来,放到一个单独的xml文件中,这样流程就不会埋没在代码里了。 今天要做一个很简单的流程: 商品发布流程 Created…

windows 修改nginx端口号_分享Nginx搭建图片服务器简单实现

第一步:安装vsftpd提供ftp服务https://www.cnblogs.com/lyq159/p/12070791.html第二步:安装Nginx提供http服务1.安装准备:安装Nginx环境a) gcc      安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如…

C#学习笔记-数据的传递(公共变量)以及Dictionary

看的代码越多,写的代码越多,就越是享受这些字符,终于渐渐懂得了那种传闻中的成就感,特别是自己从看不懂然后一步一步学,一个代码一个代码地敲,最后哪怕只是完成了一个小功能,也都是特别自豪的&a…

斐波那契数列通项公式

1.对于斐波那契数列来说,存在通项公式,f[n] 2、Hdu练习题1568; 大意求斐波那契数列中的某一项,n很大,只能在O(1)时间求出,并且只要前四位 当n很大时最后一项几乎为零转载于:https://www.cnblogs.com/dlut-l…

服务器驱动精灵_驱动精灵真的可以帮你安装驱动吗?别再无脑装驱动了

之前和大家讲过一期安装官方纯净系统的方法,戳我查看然后很多人就说重装之后显卡驱动掉了打游戏卡的跟PPT一样。于是很多人在重装系统或是进行了重大硬件更新后,一般会采用第三方驱动管理软件来进行硬件的更新,实际上这是一种自杀式行为&…

(原创)网吧桌面背景添加文字,转载注明出处!

很简单的小工具,可用于公告等。 下载地址:http://pan.baidu.com/s/1i5dPQTJ 密码:sfw7 博客地址:http://www.cnblogs.com/flybox/ 如有必要,后续可添加功能:远端配置文字内容等,方便多网吧统一…

前端vue适配不同的分辨率_前端面试时,被问到项目中的难点有哪些?

在每个前端求职者的面试过程中,一定都有过被面试官问到项目中的难点,而答不上来的情况。为了让大家在前端面试前准备得更加充足,小编准备了一些易被忽视且难度较高的前端面试题,希望可以帮助大家更加顺利完成求职,找到…

在jsp页面里动态生成EL表达式的key

如图,页面中有n个商品列表需要加载,这个列表的名字分别是list1、list2…listn,总之不是写死的。 在Ctroller里面,可见参数名师动态生成的: RequestMapping(method RequestMethod.GET) public String showIndex(Model…

AutoLayout--masonry使用

[label1 mas_makeConstraints:^(MASConstraintMaker *make) { //使左边间距为 make.left.equalTo(self.view.mas_left).offset(11); //顶部间距 make.top.equalTo(self.view.mas_top).offset(70); //高度 make.height.equalTo(30); }]; [label2 mas_makeConstraints:^(MASConst…

matplotlib 热力图_5分钟入门 Seaborn 热力图可视化

Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。注:所有代码均在IPy…

Linq(拓展方法+select())

拓展方法: 目的:对于已存在类型的行为进行拓展 注意事项: 1:扩展方法必须是一种特殊的静态方法 2:扩展方法必须是在静态类中 3: 扩展方法的优先级低于同名类的方法 4:扩展方法只在特定的命名空间内有效 5&a…

手机全部零件名称图片_【直播课】一条记录中显示多张图片

↑点击上方“Access软件网”免费订阅温馨提示这是一节免费课,干货太多,强烈推荐!今天(2019年1月10日)晚上8点,准时开讲,欢迎大家前来听课!点击文章末尾左下角的原 理本课示例是显示某个零件的图片&#xf…

snmp获取交换机日志_日志审计系统和数据库审计系统的区别

今天就易混淆的日志审计系统与数据库审计系统进行辨析。从日志审计系统和数据库审计系统的技术特点和原理来切入,来分析日志审计系统与数据库审计系统的异同。01、日志审计系统系统日志系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系…

java web开发基础学习

由于以前很少用java开发,至于连myEclipse都不怎么熟悉。 1、使用myEclipse生成部署网站步骤。 选tomcat后点击右边的Redeploy 这样便在tomcat目录下生成了一个部署网站文件。 2、使用myEclipse调试web步骤 将project下拉中所有项目的server全部remove. 留下需要调试…

装B指南之使用浏览器播放电影

家里断网了,女票说要看电影。电影之前早已下好,奈何播放器不给力,播放不了rmvb格式,怎么办? 办法很简单,使用浏览器来播放!现在的浏览器都内置了视频的解码器,直接将视频拖进浏览器…

C#链接mysql 新手容易出错的问题

1.Access denied for user rootDESKTOP-AN72KEI (using password: YES) 出现这个问题的原因是因为mysql的自带用户root理论上是不允许对外访问的,只能本地访问,如果需要访问该用户,需要修改一些mysql的配置文件,最好是使用自己新建…

TCP笔记

TCP笔记 概念 MTU:maximum transmission unit最大传输单元 每种网络都不一样,以太网是1500。最小46字节。当数据块大于MTU时,将在发送端IP层进行分片,接收端IP层进行重组。IP分组在网络中传输中出现丢包时,由于IP层没有…

微信语音怎么转发给别人听_微信分付怎么邀请别人 微信分付如何才能被邀请开通...

阅读本文前,请您先点击上面蓝色字体,再点关 注这样您就可以继续免费收到文章了,每天都有分享,完全是“免费订阅”,请放心关注注:本文转载自网络,如有侵权,请在后台留言联系我们进行删…

Javascript事件委托

Javascript事件通过冒泡传递,事件最初发生在某个元素,然后传递给该元素的父元素,父元素再传给父元素,如此一级一级往上传递。如果事件发生的元素不处理事件,而是让事件传递到祖先元素,让祖先元素处理&#…