Python数据分析之pandas数据选取(上)

简介: Python数据分析之pandas数据选取(上)

1 引言


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


2 行(列)选取:df[]


行(列)选取是在单一维度上进行数据的选取,即以行为单位进行选取或者以列为单位进行选取。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
相关文章
|
15天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
17天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
27天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
40 3
|
20天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
61 4
数据分析的 10 个最佳 Python 库
|
13天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
24天前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
|
22天前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
26天前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
41 3
|
26天前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
27天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。