数据分析工具PANDAS技巧-如何过滤数据

简介: 在本文中,我们将介绍在Python中过滤pandas数据帧的各种方法。 数据过滤是最常见的数据操作操作之一。 它类似于SQL中的WHERE子句,或者必须在MS Excel中使用过滤器根据某些条件选择特定行。

在本文中,我们将介绍在Python中过滤pandas数据帧的各种方法。 数据过滤是最常见的数据操作操作之一。 它类似于SQL中的WHERE子句,或者必须在MS Excel中使用过滤器根据某些条件选择特定行。 就速度而言,python执行过滤和聚合更佳。 它有很棒的库:pandas。 Pandas是在numpy包之上构建的,它是用C语言编写的,这是一种低级语言。 因此,使用pandas包进行数据操作是处理大型数据集的快速而智能的方法。

image

数据过滤的示例

它是预测建模或任何报告项目的数据准备的最初步骤之一。 它也被称为“子集数据”。 请参阅下面的一些数据过滤示例。

  • 选择在2019年1月1日之后开立帐户的所有活跃客户
  • 提取过去6个月内进行超过3笔交易的所有客户的详细信息
  • 获取在组织中工作超过3年且在过去两年中获得最高评级的员工的信息
  • 分析投诉数据并确定在过去1年内提交超过5个投诉的客户
  • 提取人均收入超过40K美元的地铁城市的详细信息

导入数据

我们将使用包含2013年从纽约出发的航班详情的数据集。该数据集有32735行和16列。下载 https://itbooks.pipipan.com/fs/18113597-393403297

表头如下:

['year', 'month', 'day', 'dep_time', 'dep_delay', 'arr_time', 'arr_delay', 'carrier', 'tailnum', 'flight', 'origin', 'dest', 'air_time', 'distance', 'hour', 'minute']

导入数据

import pandas as pd
df = pd.read_csv("nycflights.csv")

使用列值过滤

选择JetBlue Airways航班详细信息,其中包含2个字母的运营商代码B6 ,起源于JFK机场。

  • 方法1:DataFrame方式

>>> newdf = df[(df.origin == "JFK") & (df.carrier == "B6")]
>>> newdf.head()
    year  month  day  dep_time  dep_delay  arr_time  arr_delay carrier tailnum  flight origin dest  air_time  distance  hour  minute
7   2013      8   13      1920       85.0      2032       71.0      B6  N284JB    1407    JFK  IAD      48.0     228.0  19.0    20.0
10  2013      6   17       940        5.0      1050       -4.0      B6  N351JB      20    JFK  ROC      50.0     264.0   9.0    40.0
14  2013     10   21      1217       -4.0      1322       -6.0      B6  N192JB      34    JFK  BTV      46.0     266.0  12.0    17.0
23  2013      7    7      2310      105.0       201      127.0      B6  N506JB      97    JFK  DEN     223.0    1626.0  23.0    10.0
35  2013      4   12       840       20.0      1240       28.0      B6  N655JB     403    JFK  SJU     186.0    1598.0   8.0    40.0

这部分代码(df.origin == "JFK") & (df.carrier == "B6")返回True / False。 条件匹配时为真,条件不匹配时为假。 稍后它在df内传递并返回与True对应的所有行。 它返回4166行。

  • 方法2:查询函数

在pandas包中,有多种方法可以执行过滤。 上面的代码也可以像下面显示的代码一样编写。 此方法更优雅,更易读,每次指定列(变量)时都不需要提及数据框名称。


>>> newdf = df.query('origin == "JFK" & carrier == "B6"')
  • 方法3:loc函数

loc是位置术语的缩写。 所有这三种方法都返回相同的输出。 这只是一种不同的过滤行的方法。


>>> newdf = df.loc[(df.origin == "JFK") & (df.carrier == "B6")]

按行和列位置过滤Pandas数据帧

假设您想按位置选择特定的行(假设从第二行到第五行)。 我们可以使用df.iloc[ ]函数。
python中的索引从零开始。 df.iloc [0:5,]指第一至第五行(此处不包括终点第6行)。 df.iloc [0:5,]相当于df.iloc [:5,]

df.iloc[:5,] #First 5 rows
df.iloc[1:5,] #Second to Fifth row
df.iloc[5,0] #Sixth row and 1st column
df.iloc[1:5,0] #Second to Fifth row, first column
df.iloc[1:5,:5] #Second to Fifth row, first 5 columns
df.iloc[2:7,1:3] #Third to Seventh row, 2nd and 3rd column

loc根据索引标签考虑行。 而iloc根据索引中的位置考虑行,因此它只需要整数。 让我们创建一个示例数据进行说明

>>> x
  col1
9     1
8     3
7     5
6     7
0     9
1    11
2    13
3    15
4    17
5    19
>>> x.iloc[0:5]
  col1
9     1
8     3
7     5
6     7
0     9
>>> x.loc[0:5]
  col1
0     9
1    11
2    13
3    15
4    17
5    19

参考资料

按行位置和列名称过滤pandas数据帧


>>> df.loc[df.index[0:5],["origin","dest"]]
  origin dest
0    JFK  LAX
1    JFK  SJU
2    JFK  LAX
3    JFK  TPA
4    LGA  ORF
# -   讨论qq群630011153 144081101

列中选择多个值

>>> newdf = df[df.origin.isin(["JFK", "LGA"])]

不等于

>>> newdf = df.loc[(df.origin != "JFK") & (df.carrier == "B6")]
>>> pd.unique(newdf.origin)
array(['LGA', 'EWR'], dtype=object)

如何否定整个条件

>>> newdf = df[~((df.origin == "JFK") & (df.carrier == "B6"))]

选择非缺失数据

>>> newdf = df[~((df.origin == "JFK") & (df.carrier == "B6"))]

过滤Pandas Dataframe中的字符串

>>> df = pd.DataFrame({"var1": ["AA_2", "B_1", "C_2", "A_2"]})
>>> df
   var1
0  AA_2
1   B_1
2   C_2
3   A_2
>>> df[df['var1'].str[0] == 'A']
   var1
0  AA_2
3   A_2
>>> df[df['var1'].str.len()>3]
   var1
0  AA_2
>>> df[df['var1'].str.contains('A|B')]
   var1
0  AA_2
1   B_1
3   A_2
相关文章
|
1天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
5 1
|
1天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
4 1
|
3天前
|
供应链 搜索推荐 数据挖掘
Pandas实战案例:电商数据分析的实践与挑战
【4月更文挑战第16天】本文通过一个电商数据分析案例展示了Pandas在处理销售数据、用户行为分析及商品销售趋势预测中的应用。在数据准备与清洗阶段,Pandas用于处理缺失值、重复值。接着,通过用户购买行为和商品销售趋势分析,构建用户画像并预测销售趋势。实践中遇到的大数据量和数据多样性挑战,通过分布式计算和数据标准化解决。未来将继续深入研究Pandas与其他先进技术的结合,提升决策支持能力。
|
3天前
|
存储 数据可视化 数据挖掘
实战案例:Pandas在金融数据分析中的应用
【4月更文挑战第16天】本文通过实例展示了Pandas在金融数据分析中的应用。案例中,一家投资机构使用Pandas加载、清洗股票历史价格数据,删除无关列并重命名,将日期设为索引。接着,数据被可视化以观察价格走势,进行基本统计分析了解价格分布,以及计算移动平均线来平滑波动。Pandas的便捷功能在金融数据分析中体现出高效率和实用性。
|
3天前
|
数据挖掘 数据处理 索引
数据合并与连接:Pandas中的强大数据整合功能
【4月更文挑战第16天】Pandas是Python数据分析的库,提供数据合并与连接功能。本文聚焦于`merge`和`concat`函数。`merge`基于键合并DataFrame,如示例中`df1`和`df2`按'key'列合并,支持多种连接方式。`concat`则沿轴堆叠DataFrame,如`df3`和`df4`沿行连接。注意合并连接时键的一致性、选择合适连接方式及处理索引和数据结构,以确保数据准确一致。学习这些方法能有效整合多数据源,便于分析。
|
3天前
|
存储 数据库连接 数据处理
数据加载与保存:Pandas中的数据输入输出操作
【4月更文挑战第16天】Pandas是Python数据分析的强大工具,支持多种数据加载和保存方法。本文介绍了如何使用Pandas读写CSV和Excel文件,以及与数据库交互。`read_csv`和`to_csv`用于CSV操作,`read_excel`和`to_excel`处理Excel文件,而`read_sql`和`to_sql`则用于数据库的读写。了解这些基本操作能提升数据处理的效率和灵活性。
|
3天前
|
数据挖掘 定位技术
基于出租车GPS轨迹数据的研究:出租车行程的数据分析
基于出租车GPS轨迹数据的研究:出租车行程的数据分析
|
4天前
|
机器学习/深度学习 数据采集 数据挖掘
Python 的科学计算和数据分析: 解释什么是数据规整(Data Wrangling)?
【4月更文挑战第15天】数据规整是将原始数据转化为适合分析和建模的格式的关键步骤,涉及缺失值处理(删除、填充、插值)、异常值检测与处理、数据类型转换、重采样、数据合并、特征选择和特征变换等任务。这些预处理步骤确保数据质量和准确性,为后续的数据分析和机器学习模型构建奠定基础。
18 4
|
10天前
|
数据采集 数据挖掘 数据处理
Pandas库在数据分析中的作用
【4月更文挑战第9天】Pandas,一个基于NumPy的数据分析Python库,以强大的数据处理和便捷的接口闻名。它包含两个核心数据结构:Series(一维标签数组)和DataFrame(二维表格)。Pandas支持数据导入/导出(如CSV、Excel),数据清洗(处理缺失值和重复值),描述性统计分析,分组聚合,以及与Matplotlib等库集成实现数据可视化。通过多索引和层次化索引,Pandas能灵活处理复杂数据集,是数据科学领域的关键工具。本文旨在帮助读者理解并运用Pandas进行高效数据分析。
|
28天前
|
数据格式 Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数转换数据格式。示例代码展示了如何通过`melt()`转为长格式,再用`pivot()`恢复为宽格式。输入数据是包含'Name'和'Age'列的DataFrame,最终结果经过转换后呈现出不同的布局。
39 6