炼数成金 门户 大数据 Python 查看内容

pandas系列学习(四):数据提取

2018-10-29 15:20| 发布者: 炼数成金_小数| 查看: 10832| 评论: 0|来自: coderpai

摘要: 有多种方法可以从 pandas DataFrame 中选择和索引行列。在这篇文章中,我们来讲一些高级的提取数据方法。在 pandas 中实现选择和索引的有三个主要选项,这可能会令人困惑。本文涉及的三个选择案例和方法是:按照行号 ...

Python Java Hadoop 培训 C++ Pandas

pandas 数据选择
有多种方法可以从 pandas DataFrame 中选择和索引行列。在这篇文章中,我们来讲一些高级的提取数据方法。

选择方式
在 pandas 中实现选择和索引的有三个主要选项,这可能会令人困惑。本文涉及的三个选择案例和方法是:
按照行号选择数据 .iloc ;
按照标签或者条件状态 .loc 选择数据;
选择混合方法 .ix ,但是这个方法在 0.20.1 之后的版本就不在使用了;


DataFrame 的选择和索引方法
对于这些探索,我们需要一些示例数据,我从 www.briandunning.com 下载了 uk-500 样本数据集。此数据包含虚拟英国字符的人工名称,地址,公司和电话号码。还要继续,你可以点击此处下载 csv 文件。按如下方式加载数据:

1. 使用 iloc 选择 pandas 数据
pandas DataFrame 的 iloc 索引器用于按位置进行基于整数位置的索引或者选择。

iloc 索引器语法是 data.iloc [row selection, column selection] ,pandas 中的 iloc 用于按照数字选择行和列,按照它们在数据框中的显示顺序。你可以想象每行的行号从 0 到总行数(data.shape[0]),而 iloc[0] 允许根据这些数字进行选择。选择列也是同理的,范围从 0 到 data.shape[1] 。

iloc 有两个参数,一个行选择器和一个列选择器。例如:

以这种方式使用 iloc 时要记住两个问题:
1.请注意,.iloc 在选择一行时返回的也是一个 pandas Series,在选择多行时返回 pandas DataFrame,或者如果选择了任何完整列。要解决此问题,请在需要 DataFrame 输出时传递单值列表。

2.当以这种方式选择多列或者多行时,请记住在你的选择中,例如 [1:5],所选的行或者列将从第一个数字到第二个数字减去 1。例如 [1:5] 将是1,2,3,4。

在实际的数据处理过程中,我很少使用 iloc 索引器,除非我想要数据帧的第一行( .iloc[0] )或最后一行( .iloc[-1] )。

2. 使用 loc 选择 pandas 数据
pandas loc 索引器可以与 DataFrame 一起用于两种不同的用例:

按照标签或者索引进行选择行;
按照布尔或者条件进行选择行;
loc 索引器的使用方法与 iloc 相同:data.loc [,] 。

2a. 使用 .loc 进行基于标签或者基于索引的方法
使用 loc 方法的选择基于数据帧的索引(如果有的话)。我们还可以使用 df.setindex() 在 DataFrame 上设置索引的位置,.loc 方法直接根据任何行的索引值进行选择。例如,将测试数据的索引设置为人员的 lastname 。

现在使用索引集,我们可以使用 .loc[] 直接为不同的 last_name 值选择行 —— 单个或者多个。例如:

使用带有 pandas 的 .loc 索引选择单行或者多行。请注意,第一个示例返回一个 Series,但是第二个示例返回的是一个 DataFrame 。你可以通过将单元素列表传递给 .loc 操作来实现单列 DataFrame 。

使用列的名称选择带 .loc 的列。在我的大多数数据工作中,通常我已经命令了列,并使用这些命名选择。

使用 .loc 索引器时,列使用字符串列表或“:” 切片通过名称引用。

你可以选择索引标签的范围 —— 选择 data.loc['Bruch':'Julio'] 将返回 “Bruch” 和 “Julio” 的索引条目之间数据框中的所有行。以下实例现在应该有意义:

请注意,在最后一个示例中,data.loc[487](索引值为 487 的行)不等于 data.iloc[487](数据中的第 487 行)。DataFrame 的索引可以是数字顺序,字符串等等。

2b. 使用 .loc 进行布尔值 / 逻辑索引
使用 data.loc[] 的布尔数组的条件选择是我最常用的方法。使用布尔索引或者逻辑选择,可以将数组或者 True/False 值传递给 .loc 索引器,以选择 Series 具有 True 值的行。

在大多数用例中,你将根据数据集中不同列的值进行选择。例如,语句 data['firstname'] == 'Antonio' 为 data 中的每一行生成一个带有 True/False 值的 pandas Series,其中 firstname 的值为 Antonio。这些类型的布尔数组可以直接传递给 .loc 索引器,如下所示:

使用布尔 True / False Sereis 选择 pandas 数据框中的行 —— 选择名为 “Antonio” 的所有行。

和以前一样,可以将第二个参数传递给 .loc 以从数据框中选择特定列。同样,列由 loc 索引器的名称引用,可以是单个字符串,列表或者切片 “:”操作。

使用 loc 选择多个列可以通过将列名传递给 .loc[] 的第二个参数来实现。

请注意,在选择列时,如果仅选择了一列,则 .loc 运算符将返回一个 Series。对于单列 DataFrame,使用单元素列表来保留 DataFrame 格式,例如:

为了更加清楚的认识 .loc 选项,可以做如下示例:

3. 使用 ix 选择 pandas 数据
注意:在版本的 pandas 中,不推荐使用 ix 索引器。

ix [] 索引器是 .loc 和 .iloc 的混合体。通常,ix 是基于标签的,并且与 .loc 索引器一样。但是,.ix 还支持整数类型选择(如 .iloc),其中传递一个整数。这仅适用于 DataFrame 的索引不是基于整数的情况。ix 将接受 .loc 和 .iloc 的任何输入。

稍微复杂一些,我更喜欢明确使用 .loc 和 .iloc 来避免意外结果。

举个例子:

使用 .loc 在 DataFrame 中设置值
稍微更改语法,你实际上可以在选择的同一语句中更新DataFrame,并使用 .loc 索引器进行过滤。此特定模式允许你根据不同条件更新列中的值。设置操作不会复制数据框,而是编辑原始数据。

举个例子:


声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-11-14 14:30 , Processed in 0.095170 second(s), 25 queries .