iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python数据分析之pandas数据选
  • 297
分享到

python数据分析之pandas数据选

数据pythonpandas 2023-01-30 23:01:08 297人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

  pandas是作为python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据选取的方法。   Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据

  pandas是作为python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据选取的方法。

  Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据选取的方式基本一致,本文主要以Dataframe为例进行介绍。

  在Dataframe中选取数据大抵包括3中情况:

  1)行(列)选取(单维度选取):df[]。这种情况一次只能选取行或者列,即一次选取中,只能为行或者列设置筛选条件(只能为一个维度设置筛选条件)。

  2)区域选取(多维选取):df.loc[],df.iloc[],df.ix[]。这种方式可以同时为多个维度设置筛选条件。

  3)单元格选取(点选取):df.at[],df.iat[]。准确定位一个单元格。

  接下来,我们以下面的数据为例,分别通过实例介绍这三种情况。

 

>>> import pandas as pd

>>> import numpy as np

>>> data = {'name': ['Joe', 'Mike', 'Jack', 'Rose', 'David', 'Marry', 'Wansi', 'Sidy', 'Jason', 'Even'],

        'age': [25, 32, 18, np.nan, 15, 20, 41, np.nan, 37, 32],

        'gender': [1, 0, 1, 1, 0, 1, 0, 0, 1, 0],

        'isMarried': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}

>>> labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

>>> df = pd.DataFrame(data, index=labels)

>>> df

    name   age  gender isMarried

a    Joe  25.0       1       yes

b   Mike  32.0       0       yes

c   Jack  18.0       1        no

d   Rose   NaN       1       yes

e  David  15.0       0        no

f  Marry  20.0       1        no

g  Wansi  41.0       0        no

h   Sidy   NaN       0       yes

i  Jason  37.0       1        no

j   Even  32.0       0        no

  行(列)选取是在单一维度上进行数据的选取,即以行为单位进行选取或者以列为单位进行选取。Dataframe对象的行有索引(index),默认情况下是[0,1,2,……]的整数序列,也可以自定义添加另外的索引,例如上面的labels,(为区分默认索引和自定义的索引,在本文中将默认索引称为整数索引,自定义索引称为标签索引)。Dataframe对象的每一列都有列名,可以通过列名实现对列的选取。

  1)选取行

选取行的方式包括三种:整数索引切片、标签索引切片和布尔数组

  a)整数索引切片:前闭后开

  • 选取第一行:
>>> df[0:1]

  name   age  gender isMarried

a  Joe  25.0       1       yes
  • 选取前两行:
>>> df[0:2]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

  b)标签索引切片:前闭后闭

  • 选取第一行:
>>> df[:'a']

  name   age  gender isMarried

a  Joe  25.0       1       yes
  • 选取前两行:
>>> df['a':'b']

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

  注意:整数索引切片是前闭后开,标签索引切片是前闭后闭,这点尤其要注意。

  c)布尔数组

  • 选取前三行
>>> df[[True,True,True,False,False,False,False,False,False,False]]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no
  • 选取所有age大于30的行
>>> df[[each>30 for each in df['age']]]

    name   age  gender isMarried

b   Mike  32.0       0       yes

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no

  通过布尔数组的方式,又可以衍生出下面的选取方式:

  • 选取所有age大于30的行
>>> df[df['age']>30]

    name   age  gender isMarried

b   Mike  32.0       0       yes

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no
  • 选取出所有age大于30,且isMarried为no的行
>>> df[(df['age']>30) & (df['isMarried']=='no')]

    name   age  gender isMarried

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no
  • 选取出所有age为20或32的行
>>> df[(df['age']==20) | (df['age']==32)]

    name   age  gender isMarried

b   Mike  32.0       0       yes

f  Marry  20.0       1        no

j   Even  32.0       0        no

  注意:像上面这种通过多个布尔条件判断的情况,多个条件最好(一定)用括号括起来,否则非常容易出错。

  2)列选取

  列选取方式也有三种:标签索引、标签列表、Callable对象

  a)标签索引:选取单个列

  • 选取name列所有数据
>>> df['name']

a      Joe

b     Mike

c     Jack

d     Rose

e    David

f    Marry

g    Wansi

h     Sidy

i    Jason

j     Even

Name: name, dtype: object

  b)标签列表:选取多个列

  • 选取name和age两列数据
>>> df[['name','age']]

    name   age

a    Joe  25.0

b   Mike  32.0

c   Jack  18.0

d   Rose   NaN

e  David  15.0

f  Marry  20.0

g  Wansi  41.0

h   Sidy   NaN

i  Jason  37.0

j   Even  32.0

  c)callable对象

  • 选取第一列
>>> df[lambda df: df.columns[0]]

a      Joe

b     Mike

c     Jack

d     Rose

e    David

f    Marry

g    Wansi

h     Sidy

i    Jason

j     Even

Name: name, dtype: object

  区域选取可以从多个维度(行和列)对数据进行筛选,可以通过df.loc[],df.iloc[],df.ix[]三种方法实现。采用df.loc[],df.iloc[],df.ix[]这三种方法进行数据选取时,方括号内必须有两个参数,第一个参数是对行的筛选条件,第二个参数是对列的筛选条件,两个参数用逗号隔开。df.loc[],df.iloc[],df.ix[]的区别如下:

  df.loc[]只能使用标签索引,不能使用整数索引,通过便签索引切边进行筛选时,前闭后闭。

  df.iloc[]只能使用整数索引,不能使用标签索引,通过整数索引切边进行筛选时,前闭后开。;

  df.ix[]既可以使用标签索引,也可以使用整数索引。

  下面分别通过实例演示这三种方法。

3.1 df.loc[]

  1)对行进行选取

  • 选取索引为‘a’的行:
>>> df.loc['a', :]

name         Joe

age           25

gender         1

isMarried    yes

Name: a, dtype: object
  • 选取索引为‘a’或‘b’或‘c’的行
>>> df.loc[['a','b','c'], :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no
  • 选取从‘a’到‘d’的所有行(包括‘d’行)
>>> df.loc['a':'d', :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no

d  Rose   NaN       1       yes
  • 用布尔数组选取前3行
>>> df.loc[[True,True,True,False,False,False], :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no
  • 选取所有age大于30的行
>>> df.loc[df['age']>30,:]

    name   age  gender isMarried

b   Mike  32.0       0       yes

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no

  也可以使用下面两方法:

>>> df.loc[df.loc[:,'age']>30, :]

    name   age  gender isMarried

b   Mike  32.0       0       yes

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no

>>> df.loc[df.iloc[:,1]>30, :]

    name   age  gender isMarried

b   Mike  32.0       0       yes

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no
  • 用callable对象选取age大于30的所有行
>>> df.loc[lambda df:df['age'] > 30, :]

    name   age  gender isMarried

b   Mike  32.0       0       yes

g  Wansi  41.0       0        no

i  Jason  37.0       1        no

j   Even  32.0       0        no

  2)对列选取

  • 输出所有人的姓名(选取name列)
>>> df.loc[:, 'name']

a      Joe

b     Mike

c     Jack

d     Rose

e    David

f    Marry

g    Wansi

h     Sidy

i    Jason

j     Even

Name: name, dtype: object
  • 输出所有人的姓名和年龄(选取name和age列)
>>> df.loc[:, 'name':'age']

    name   age

a    Joe  25.0

b   Mike  32.0

c   Jack  18.0

d   Rose   NaN

e  David  15.0

f  Marry  20.0

g  Wansi  41.0

h   Sidy   NaN

i  Jason  37.0

j   Even  32.0
  • 输出所有人的姓名、年龄、婚否(选取name、age、isMarried列)
>>> df.loc[:, ['name','age','isMarried']]

    name   age isMarried

a    Joe  25.0       yes

b   Mike  32.0       yes

c   Jack  18.0        no

d   Rose   NaN       yes

e  David  15.0        no

f  Marry  20.0        no

g  Wansi  41.0        no

h   Sidy   NaN       yes

i  Jason  37.0        no

j   Even  32.0        no
  • 用布尔数组的方式选取前3列
>>> df.loc[:, [True,True,True,False]]

    name   age  gender

a    Joe  25.0       1

b   Mike  32.0       0

c   Jack  18.0       1

d   Rose   NaN       1

e  David  15.0       0

f  Marry  20.0       1

g  Wansi  41.0       0

h   Sidy   NaN       0

i  Jason  37.0       1

j   Even  32.0       0

  3)同时对行和列进行筛选

  • 输出年龄大于30的人的姓名和年龄
>>> df.loc[df['age']>30,['name','age']]

    name   age

b   Mike  32.0

g  Wansi  41.0

i  Jason  37.0

j   Even  32.0
  • 输出行名为‘Mike’或‘Marry’的姓名和年龄
>>> df.loc[(df['name']=='Mike') |(df['name']=='Marry'),['name','age']]                                                    

    name   age

b   Mike  32.0

f  Marry  20.0

3.2 df.iloc[]

  1)行选取

  • 选取第2行
>>> df.iloc[1, :]

name         Mike

age            32

gender          0

isMarried     yes

Name: b, dtype: object
  • 选取前3行
>>> df.iloc[:3, :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no
  • 选取第2行、第4行、第6行
>>> df.iloc[[1,3,5],:]

    name   age  gender isMarried

b   Mike  32.0       0       yes

d   Rose   NaN       1       yes

f  Marry  20.0       1        no
  • 通过布尔数组选取前3行
>>> df.iloc[[True,True,True,False,False,False], :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no

  2)列选取

  • 选取第2列
>>> df.iloc[:, 1]

a    25.0

b    32.0

c    18.0

d     NaN

e    15.0

f    20.0

g    41.0

h     NaN

i    37.0

j    32.0

Name: age, dtype: float64
  • 选取前3列
>>> df.iloc[:, 0:3]

    name   age  gender

a    Joe  25.0       1

b   Mike  32.0       0

c   Jack  18.0       1

d   Rose   NaN       1

e  David  15.0       0

f  Marry  20.0       1

g  Wansi  41.0       0

h   Sidy   NaN       0

i  Jason  37.0       1

j   Even  32.0       0

l  选取第1列、第3列、第4列
  • 选取第1列、第3列和第4列
>>> df.iloc[:, [0,2,3]]

    name  gender isMarried

a    Joe       1       yes

b   Mike       0       yes

c   Jack       1        no

d   Rose       1       yes

e  David       0        no

f  Marry       1        no

g  Wansi       0        no

h   Sidy       0       yes

i  Jason       1        no

j   Even       0        no
  • 通过布尔数组选取前3列
>>> df.iloc[:,[True,True,True,False]]
    name   age  gender
a    Joe  25.0       1
b   Mike  32.0       0
c   Jack  18.0       1
d   Rose   NaN       1
e  David  15.0       0
f  Marry  20.0       1
g  Wansi  41.0       0
h   Sidy   NaN       0
i  Jason  37.0       1
j   Even  32.0       0

  3)同时选取行和列

  • 选取第2行的第1列、第3列、第4列
>>> df.iloc[1, [0,2,3]]

name         Mike

gender          0

isMarried     yes

Name: b, dtype: object
  • 选取前3行的前3列
>>> df.iloc[:3, :3]

   name   age  gender

a   Joe  25.0       1

b  Mike  32.0       0

c  Jack  18.0       1

3.3 df.ix[]

  df.ix[]既可以通过整数索引进行数据选取,也可以通过标签索引进行数据选取,换句话说,df.ix[]是df.loc[]和df.iloc[]的功能集合,且在同义词选取中,可以同时使用整数索引和标签索引。

  • 选取第3行的name数据
>>> df.ix[2,'name']

'Jack'
  • 选取a行、c行的第1列,第2列和第4列数据
>>> df.ix[['a','c'], [0,1,3]]

   name   age isMarried

a   Joe  25.0       yes

c  Jack  18.0        no
  • 选取所有未婚者的姓名和年龄
>>> df.ix[df['isMarried']=='no',['name','age']]

    name   age

c   Jack  18.0

e  David  15.0

f  Marry  20.0

g  Wansi  41.0

i  Jason  37.0

j   Even  32.0

  单元格选取包括df.at[]和df.iat[]两种方法。df.at[]和df.iat[]使用时必须输入两个参数,即行索引和列索引,其中df.at[]只能使用标签索引,df.iat[]只能使用整数索引。df.at[]和df.iat[]选取的都是单个单元格(单行单列),所以返回值都为基本数据类型。

4.1 df.at[]

  • 选取b行的name列
>>> df.at['b','name']

'Mike'

4.2 df.iat[]

  • 选取第2行第1列
>>> df.iat[1,0]

'Mike'

  1)选取某一整行(多个整行)或某一整列(多个整列)数据时,可以用df[]、df.loc[]、df.iloc[],此时df[]的方法书写要简单一些。

  2)进行区域选取时,如果只能用标签索引,则使用df.loc[]或df.ix[],如果只能用整数索引,则用df.iloc[]或df.ix[]。不过我看到有资料说,不建议使用df.ix[],因为df.loc[]和df.iloc[]更精确(有吗?我没理解精确在哪,望告知)。

  3)如果选取单元格,则df.at[]、df.iat[]、df.loc[]、df.iloc[]都可以,不过要注意参数。  

  4)选取数据时,返回值存在以下情况:

  • 如果返回值包括单行多列或多行单列时,返回值为Series对象;
  • 如果返回值包括多行多列时,返回值为DataFrame对象;
  • 如果返回值仅为一个单元格(单行单列)时,返回值为基本数据类型,例如str,int等。

  5)df[]的方式只能选取行和列数据,不能精确到单元格,所以df[]的返回值一定DataFrame或Series对象。

  6)当使用DataFrame的默认索引(整数索引)时,整数索引即为标签索引。例如,使用上面的data实例化一个DataFrame对象:

>>> df2 = pd.DataFrame(data)

>>> df2.loc[1,'name']

'Mike'

>>> df2.iloc[1,0]

'Mike'

 

 

--结束END--

本文标题: python数据分析之pandas数据选

本文链接: https://www.lsjlt.com/news/181299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python数据分析之pandas数据选
      Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据选取的方法。   Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据...
    99+
    2023-01-30
    数据 python pandas
  • Python数据分析之pandas读取数据
    一、三种数据文件的读取 二、csv、tsv、txt 文件读取 1)CSV文件读取: 语法格式:pandas.read_csv(文件路径) CSV文件内容如下: import pandas as pd file...
    99+
    2022-06-02
    python pandas读取数据 pandas数据读取
  • Python数据分析库之pandas,你
    写这个系列背后的故事 咦,面试系列的把基础部分都写完啦,哈哈答,接下来要弄啥嘞~ pandas吧 外国人开发的 翻译成汉语叫 熊猫 厉害厉害,很接地气 一个基于numpy的库 干啥的? 做数据分析用的 而数据分析是python体系下一个...
    99+
    2023-01-31
    数据 Python pandas
  • Python数据分析之pandas函数详解
    目录一、apply和applymap二、排序三、处理缺失数据一、apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df...
    99+
    2022-11-12
  • 数据分析之pandas模块
          一、Series   类似于一位数组的对象,第一个参数为数据,第二个参数为索引(索引可以不指定,就默认用隐式索引) Series(data=np.random.randint(1,50,(10,))) Series(data...
    99+
    2023-01-30
    模块 数据 pandas
  • 数据分析之Pandas VS SQL!
    编辑:zone来源:数据管道作者:艾德宝器AbstractPandas是一个开源的Python数据分析库,结合 NumPy 和 Matplotlib 类库,可以在内存中进行高性能的数据清洗、转换、分析及可视化工作。对于数据开发工程师或分析师...
    99+
    2023-06-02
  • 数据分析利器之Pandas
    Pandas是一个python的开源库,它基于Numpy,提供了多种高性能且易于使用的数据结构。Pandas最初被用作金融数据分析工具而开发,由于它有着强大的功能,目前广泛应用于数据分析、机器学习以及量化投资等。下面来跟随作者一起认识下Pa...
    99+
    2023-06-02
  • Python数据分析之pandas比较操作
    目录一、比较运算符和比较方法二、两个DataFrame比较三、两个Series比较四、与数字或字符串比较五、与array进行比较一、比较运算符和比较方法 比较运算符用于判断是否相等和比较大小,Python中的比较运算...
    99+
    2022-06-02
    Python pandas比较操作 python pandas比较运算符
  • Python数据分析之 Pandas Dataframe条件筛选遍历详情
    目录一、条件筛选二、Dataframe数据遍历for...in...语句iteritems()方法iterrows()方法itertuples()方法一、条件筛选 查询Pandas ...
    99+
    2022-11-11
  • Pandas数据分析之pandas文本处理
    目录前言文本数据类型字符操作文本格式文本对齐​文本计数和编码格式判断文本高级处理文本分割 文本切片选择 slice划分 partition文本替换指定位置替换重复替换文本连...
    99+
    2022-11-11
  • Python入门之使用pandas分析excel数据
    目录1.问题2.方案2.1.安装2.2.读写文件2.3.数据操作2.4.数据筛选2.5.数据写入2.6.数据删除3.讨论 总结1.问题 在python中,读写excel数据方法很多,...
    99+
    2022-11-12
  • Pandas数据分析之pandas数据透视表和交叉表
    目录前言整理透视 pivot 聚合透视 Pivot Table 聚合透视高级操作交叉表crosstab()数据融合melt()数据堆叠 stack前言 panda...
    99+
    2022-11-11
  • Python数据分析之Pandas Dataframe条件筛选遍历的方法
    这篇文章主要介绍“Python数据分析之Pandas Dataframe条件筛选遍历的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python数据分析之Pandas Dat...
    99+
    2023-06-30
  • Python数据分析--Pandas知识
    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘 1. 重复值的处理 利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID. 1 import pandas as p...
    99+
    2023-01-30
    知识 数据 Python
  • Python高级数据分析之pandas和matplotlib绘图
    目录一、matplotlib 库二、Pandas绘图1.绘制简单的线型图1.1)简单的Series图表示例 .plot()1.2) 两个Series绘制的曲线可以叠加2.数据驱动的线...
    99+
    2022-11-13
  • Python数据分析之Pandas Dataframe如何自定义
    今天小编给大家分享一下Python数据分析之Pandas Dataframe如何自定义的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2023-06-30
  • Python数据分析之 Pandas Dataframe应用自定义
    目录前言:应用函数apply 方法applymap 方法前言: 在进行数据分析时,难免需要对数据集应用一些我们自定义的一些函数,或者其他库的函数,得到我们想要的数据,这种情况下,可能...
    99+
    2022-11-11
  • Python实践之使用Pandas进行数据分析
    目录一. 导入Pandas库二. 读取数据三. 查看数据四. 选择数据五. 数据清洗六. 数据分析七. 数据可视化八. 导出数据九. 实战案例总结在数据分析领域,Python的Pan...
    99+
    2023-05-18
    Python Pandas数据分析 Pandas数据分析 Python Pandas
  • python Pandas之DataFrame索引及选取数据
    目录1.索引是什么1.1 认识索引1.2 自定义索引2. 索引的简单使用2.1 列索引2.2 行索引2.2.1 使用[ ]2.2.2 使用.loc()和.iloc()1.索引是什么 ...
    99+
    2022-11-11
  • Python数据分析之真实IP请求Pandas详解
    前言 pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结...
    99+
    2022-06-04
    详解 真实 数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作