面向初学者的 Python Pandas – 完整指南(第 2 部分)

面向初学者的 Python Pandas - 完整指南(第 2 部分)

在本文中,我们将继续学习 Python Pandas。我们将了解如何从文件中读取 DataFrame 以及对初学者来说最重要的 Pandas 运算符。

在该系列的上一篇文章中,我们了解了 Pandas 中的基本概念,例如“什么是 Pandas?”SeriesDataFrame. 如果您不记得,请单击此处返回第 1 部分

初学者的 Python 熊猫。使用 pandas 探索、清理、转换和可视化数据

初学者的 Python Pandas(华盛顿邮报摄)

如何阅读和写作 DataFrame

在 Pandas 库的支持下,读取数据非常简单。我们可以从各种数据源加载数据,例如 CSV、JSON 或 Excel 文件。因为学习的目的,我们会尝试用各种数据源加载数据。

JSON文件

假设我们有一个 JSON 文件,其中包含与产品库存相关的数据,如下所示。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-string-color)">"CAN"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-string-color)">"Headphone"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-string-color)">"Laptop"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">5</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-string-color)">"SGN"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-string-color)">"Headphone"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-string-color)">"Laptop"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">8</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-string-color)">"SIN"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-string-color)">"Headphone"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-string-color)">"Laptop"</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">5</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span>

read_json然后我们可以使用pandas的功能轻松读取 JSON 文件。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">pandas</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">pd</span>
<span style="color:var(--syntax-text-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">read_json</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"data.json"</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result:
#            CAN  SGN  SIN
# headphone    1    3    0
# laptop       5    8    5
#
</span></code></span></span>

将数据写入 JSON 文件

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">to_json</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"exported_data.json"</span><span style="color:var(--syntax-text-color)">)</span>
</code></span></span>

CSV 文件

使用前面示例中的相同演示数据。但是,文件格式是 CSV。文件中的数据如下:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>,CAN,SGN,SIN
headphone,1,3,0
laptop,5,8,5
</code></span></span>

使用加载数据到 DataFrame read_csv

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">pandas</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">pd</span>
<span style="color:var(--syntax-text-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">read_csv</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"data.csv"</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result:
#     Unnamed: 0  CAN  SGN  SIN
#  0  headphone    1    3    0
#  1     laptop    5    8    5
#
</span></code></span></span>

在上面的代码中,read_csv默认生成索引列。但是,我们希望第一列(耳机、笔记本电脑)是索引列。所以传递index_col参数来read_csv让它知道哪一列将被索引。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">pandas</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">pd</span>
<span style="color:var(--syntax-text-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">read_csv</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"data.csv"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">index_col</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result:
#              CAN  SGN  SIN
#  headphone    1    3    0
#  laptop       5    8    5
#
</span></code></span></span>

将 DataFrame 写入 CSV 文件

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">to_csv</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"exported_data.csv"</span><span style="color:var(--syntax-text-color)">)</span>
</code></span></span>

Excel文件

read_excel使用函数从excel文件中读取数据。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">pandas</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">pd</span>
<span style="color:var(--syntax-text-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">read_excel</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"data.xlsx"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">index_col</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result:
#              CAN  SGN  SIN
#  headphone    1    3    0
#  laptop       5    8    5
#
</span></code></span></span>

将DataFrame写入excel文件

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">to_excel</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'exported_data.xlsx'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">sheet_name</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-string-color)">'Sheet1'</span><span style="color:var(--syntax-text-color)">)</span>
</code></span></span>

重要的 Pandas 运算符

在学习 pandas 运算符之前,我们将创建 DataFrame 并在 pandas 运算符部分的示例中使用它。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">pandas</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">pd</span>
<span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">numpy</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">np</span>

<span style="color:var(--syntax-text-color)">dates</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">date_range</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'20190101'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">periods</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-literal-color)">50</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">DataFrame</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">np</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">random</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">randn</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">50</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">4</span><span style="color:var(--syntax-text-color)">),</span> <span style="color:var(--syntax-text-color)">index</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-text-color)">dates</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">columns</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-text-color)">list</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'ABCD'</span><span style="color:var(--syntax-text-color)">))</span>
</code></span></span>

查看您的数据

现在我们有一个 50 行的 DataFrame。它太大了,无法打印。在现实生活中,行数会大很多倍。因此,我们首先应该知道的是如何打印出几行以作为视觉参考。

我们将用于.head()显示您数据的前 5 行

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">head</span><span style="color:var(--syntax-text-color)">()</span>

<span style="color:var(--syntax-comment-color)"># Result:
#                   A         B         C         D
#  2019-01-01  -1.005372  0.142613 -0.181516  1.036709
#  2019-01-02   0.790087  0.294033 -0.602744  1.035578
#  2019-01-03  -1.703856  0.126258  1.080593 -0.421066
#  2019-01-04  -0.558818 -2.923537 -1.721127 -0.275644
#  2019-01-05  -1.408334 -0.860980  0.052589  1.104063
</span></code></span></span>

如果我们想打印前 10 行而不是 5 行,我们该怎么办?在这种情况下,我们可以传递一个数字.head()来定义要打印的行数。例如:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">head</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">10</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result:
#                   A         B         C         D
#  2019-01-01  -1.005372  0.142613 -0.181516  1.036709
#  2019-01-02   0.790087  0.294033 -0.602744  1.035578
#  2019-01-03  -1.703856  0.126258  1.080593 -0.421066
#  2019-01-04  -0.558818 -2.923537 -1.721127 -0.275644
#  2019-01-05  -1.408334 -0.860980  0.052589  1.104063
#  2019-01-06   0.418509  0.607834  0.017931  0.748909
#  2019-01-07   0.336740 -0.406930  1.420234 -1.702862
#  2019-01-08   0.739592  1.051292 -0.757623 -1.156324
#  2019-01-09  -0.225760  0.416810  0.128996 -1.450296
#  2019-01-10   0.527811  1.771893 -0.551995  1.101953
</span></code></span></span>

我们可以.tail()用来获取最后 5 行的数据。和 一样.head(),我们可以传递一个数字来确定要打印的行数。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">tail</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-literal-color)">7</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result:
#                  A         B         C         D
#  2019-02-13  0.834528  2.912336 -0.957908  0.758701
#  2019-02-14 -0.866577 -0.886605 -0.339376  1.296223
#  2019-02-15  0.324452 -1.030220  0.854473  1.471936
#  2019-02-16  2.657040 -1.169546 -1.746896 -0.745877
#  2019-02-17  1.494073 -0.709933 -0.086347 -0.512125
#  2019-02-18 -1.455421 -0.370378  1.475331 -0.867604
#  2019-02-19 -1.542814  0.355690 -0.705522  0.069457
</span></code></span></span>

显示数据信息

.info() 将向您显示数据的摘要信息

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">info</span><span style="color:var(--syntax-text-color)">()</span>

<span style="color:var(--syntax-comment-color)"># Result
#  <class 'pandas.core.frame.DataFrame'>
#  DatetimeIndex: 50 entries, 2019-01-01 to 2019-02-19
#  Freq: D
#  Data columns (total 4 columns):
#  A    50 non-null float64
#  B    50 non-null float64
#  C    50 non-null float64
#  D    50 non-null float64
#  dtypes: float64(4)
#  memory usage: 2.0 KB
</span></code></span></span>

DataFrame的选择、添加和删除

到目前为止,我们知道了解 Pandas 数据结构,如何创建、加载和编写DataFrame. 在本节中,我们将学习您需要经常使用的选择、添加和删除方法。

按列

选择一列数据的简单方法是使用括号。例如:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'A'</span><span style="color:var(--syntax-text-color)">]</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">head</span><span style="color:var(--syntax-text-color)">()</span>

<span style="color:var(--syntax-comment-color)"># Result
#  2019-01-01   -1.005372
#  2019-01-02    0.790087
#  2019-01-03   -1.703856
#  2019-01-04   -0.558818
#  2019-01-05   -1.408334
#  Freq: D, Name: A, dtype: float64
</span></code></span></span>

我们可以在括号内选择多列。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">[[</span><span style="color:var(--syntax-string-color)">'A'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'D'</span><span style="color:var(--syntax-text-color)">]]</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">head</span><span style="color:var(--syntax-text-color)">()</span>

<span style="color:var(--syntax-comment-color)"># Result
#                   A         D
#  2019-01-01  -1.005372  1.036709
#  2019-01-02   0.790087  1.035578
#  2019-01-03  -1.703856 -0.421066
#  2019-01-04  -0.558818 -0.275644
#  2019-01-05  -1.408334  1.104063
</span></code></span></span>

按行

索引数据的另一种选择是使用.locand .iloc。请记住,此语法仅用于按行索引。下面是它的语法:

  • .loc:名字的位置
  • .iloc:索引号定位

如果我们只将 1 个参数传递给 .loc 或 .iloc 。它理解参数是默认的行。现在我们尝试获取标记为“2019-02-19”的行。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">loc</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'2019-02-19'</span><span style="color:var(--syntax-text-color)">]</span>

<span style="color:var(--syntax-comment-color)"># Result
#  A   -1.542814
#  B    0.355690
#  C   -0.705522
#  D    0.069457
#  Name: 2019-02-19 00:00:00, dtype: float64
</span></code></span></span>

现在我们将选择结果中的特定列

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">loc</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'2019-02-19'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'A'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'B'</span><span style="color:var(--syntax-text-color)">]]</span>

<span style="color:var(--syntax-comment-color)"># Result
#  A   -1.542814
#  B    0.355690
#  Name: 2019-02-19 00:00:00, dtype: float64
</span></code></span></span>

因为行标签是时间,所以我们也可以按时间范围获取行。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">loc</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'2019-02-02'</span><span style="color:var(--syntax-text-color)">:</span><span style="color:var(--syntax-string-color)">'2019-02-5'</span><span style="color:var(--syntax-text-color)">]</span>

<span style="color:var(--syntax-comment-color)"># Result
#                   A         B         C         D
#  2019-02-02   1.343458 -0.940805 -0.671073 -0.102026
#  2019-02-03   0.815890  1.190464 -0.479341 -0.105754
#  2019-02-04  -0.256803  0.595940  0.279049  2.010431
#  2019-02-05   0.311328 -0.111790 -0.515169 -0.014552
</span></code></span></span>

与 类似.loc,我们可以使用.iloc来选择一个或多个特定的索引号。以下示例用于选择多个索引号:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">iloc</span><span style="color:var(--syntax-text-color)">[[</span><span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span><span style="color:var(--syntax-literal-color)">3</span><span style="color:var(--syntax-text-color)">],:]</span>

<span style="color:var(--syntax-comment-color)"># Result
#                  A         B         C         D
#  2019-01-02   0.790087  0.294033 -0.602744  1.035578
#  2019-01-04  -0.558818 -2.923537 -1.721127 -0.275644
</span></code></span></span>

或者选择一片索引:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">iloc</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">10</span><span style="color:var(--syntax-text-color)">:</span><span style="color:var(--syntax-literal-color)">13</span><span style="color:var(--syntax-text-color)">]</span>

<span style="color:var(--syntax-comment-color)"># Result
#                   A         B         C         D
#  2019-01-11   0.530191 -1.301325 -0.050186  0.267728
#  2019-01-12  -0.652778 -0.611594  0.291840 -0.935883
#  2019-01-13   1.602400 -0.137409  1.002766  0.820419
</span></code></span></span>

请注意,我们正在获取行 [10:13] 但我们得到的是从第 10 行到第 12 行的数据。第 13 行不在结果中。

切片.iloc遵循与切片列表相同的规则。最后一个索引处的对象不包含在结果中。

通过可调用选择

.loc.iloc并且[]索引也可以接受可调用的。该函数必须是具有一个参数的函数。为获得最佳实践,Python 开发人员通常使用lambda. 您可以参考我们的文章了解有关函数的更多详细信息lambdaPython Lambda 函数

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">loc</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-declaration-color)">lambda</span> <span style="color:var(--syntax-text-color)">row</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">row</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">D</span> <span style="color:var(--syntax-error-color)">></span> <span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">]</span>

<span style="color:var(--syntax-comment-color)"># Result:
#                   A         B         C         D
#  2019-01-01  -0.862970  1.312603 -0.427154  1.222134
#  2019-01-03   0.173703 -0.258924 -0.014464  0.320602
#  2019-01-04   0.252102 -1.914325  0.649628  0.885115
#  2019-01-06  -0.461437  0.063366  0.569461  0.427437
#  2019-01-08  -0.956210  0.067605 -2.273661  0.833149
#  2019-01-09   0.340620 -1.976085 -1.144538  0.425282
#  2019-01-11   0.530191 -1.301325 -0.050186  0.267728
#  2019-01-13   1.602400 -0.137409  1.002766  0.820419
#  2019-01-15  -1.083804  1.790858 -0.301093  0.674832
#  2019-01-16  -0.143779  2.104730 -1.228123  1.568482
#  2019-01-22  -0.821942  1.381137 -1.812166  0.785756
#  2019-01-23  -1.404428  0.563167  2.138703  2.387186
#  2019-01-28   0.271000 -0.633658 -0.839952  0.816997
#  2019-01-29  -0.259307  1.638976 -0.648043  0.715521
#  2019-02-01   0.109348 -0.624031 -0.283261  0.138264
#  2019-02-03  -1.319024 -0.131162  2.011317  1.312116
#  2019-02-04   0.910435 -0.636221 -0.857388  0.456990
</span></code></span></span>

处理重复数据

在处理大型数据集时,处理重复数据是一种常见情况。我们可以遍历每一行数据并检查它是否与其他数据重复,但这会非常缓慢和复杂。

幸运的是,DataFrame 类提供了帮助开发人员轻松处理重复数据的功能。我们可以按行或按列查找重复数据。现在我们将弄清楚它是如何工作的。

  • duplicated它将在每个重复的地方返回一个带有True的布尔系列。
  • drop_duplicates 删除重复的行。

默认情况下,第一个观察到的行被认为是唯一的。但是,每个方法都有一个keep参数来指定保留哪一行。

  • keep='first':默认值,除了第一次观察到的数据外,标记重复。
  • keep='last':标记重复,除了最后观察到的数据。
  • keep=False:标记所有都是重复的。

在进行示例之前,我们将创建如下数据

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-error-color)">import</span> <span style="color:var(--syntax-text-color)">pandas</span> <span style="color:var(--syntax-declaration-color)">as</span> <span style="color:var(--syntax-text-color)">pd</span>

<span style="color:var(--syntax-text-color)">employees</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">[(</span><span style="color:var(--syntax-string-color)">'Mark'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">34</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Toronto'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Kana'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">30</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Delhi'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Tam'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">26</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Ha Noi'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Kana'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">30</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Delhi'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Kana'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">30</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Delhi'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Kana'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">30</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Delhi'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Hashima'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">40</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'London'</span><span style="color:var(--syntax-text-color)">),</span>
            <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">'Rook'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-literal-color)">30</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Delhi'</span><span style="color:var(--syntax-text-color)">)</span>
            <span style="color:var(--syntax-text-color)">]</span>

<span style="color:var(--syntax-text-color)">data</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">pd</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">DataFrame</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">employees</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">columns</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'Name'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'Age'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'City'</span><span style="color:var(--syntax-text-color)">])</span>
<span style="color:var(--syntax-declaration-color)">print</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)">#        Name  Age     City
#  0     Mark   34  Toronto
#  1     Kana   30    Delhi
#  2      Tam   26   Ha Noi
#  3     Kana   30    Delhi
#  4     Kana   30    Delhi
#  5     Kana   30    Delhi
#  6  Hashima   40   London
#  7     Rook   30    Delhi
</span></code></span></span>

按行

查找重复的行:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)"># The same with data.duplicated(keep='first')
</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">duplicated</span><span style="color:var(--syntax-text-color)">()</span>

<span style="color:var(--syntax-comment-color)"># Result
#  0    False
#  1    False
#  2    False
#  3     True
#  4     True
#  5     True
#  6    False
#  7    False
#  dtype: bool
</span></code></span></span>

结果是一个系列数据,每行标记它是否重复。如果我们使用结果来选择数据,我们将得到重复结果的值。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">duplicated</span><span style="color:var(--syntax-text-color)">()]</span>

<span style="color:var(--syntax-comment-color)"># Result
#     Name  Age   City
#  3  Kana   30  Delhi
#  4  Kana   30  Delhi
#  5  Kana   30  Delhi
</span></code></span></span>

删除重复的行,将第一个观察到的数据保留为默认值

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">drop_duplicates</span><span style="color:var(--syntax-text-color)">()</span>

<span style="color:var(--syntax-comment-color)"># Result
#        Name  Age     City
#  0     Mark   34   Toronto
#  1     Kana   30    Delhi
#  2      Tam   26   Ha Noi
#  6  Hashima   40   London
#  7     Rook   30    Delhi
</span></code></span></span>

现在让我们看看如果有什么区别 keep='last'

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">drop_duplicates</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">keep</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-string-color)">'last'</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result
#        Name  Age     City
#  0     Mark   34  Toronto
#  2      Tam   26   Ha Noi
#  5     Kana   30    Delhi
#  6  Hashima   40   London
#  7     Rook   30    Delhi
</span></code></span></span>

现在 keep=False

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">drop_duplicates</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">keep</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-text-color)">False</span><span style="color:var(--syntax-text-color)">)</span>

<span style="color:var(--syntax-comment-color)"># Result
#        Name  Age     City
#  0     Mark   34  Toronto
#  2      Tam   26   Ha Noi
#  6  Hashima   40   London
#  7     Rook   30    Delhi
</span></code></span></span>

按列

我们能够选择特定的列来确定数据是否重复

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">duplicated</span><span style="color:var(--syntax-text-color)">([</span><span style="color:var(--syntax-string-color)">'Age'</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">'City'</span><span style="color:var(--syntax-text-color)">])]</span>

<span style="color:var(--syntax-comment-color)"># Result
#     Name  Age   City
#  3  Kana   30  Delhi
#  4  Kana   30  Delhi
#  5  Kana   30  Delhi
#  7  Rook   30  Delhi
</span></code></span></span>

所选列的 drop_duplicates 的其他示例将在我们的 GitHub 中提供。如果需要,请检查它以获取更多详细信息。

应用功能

现在,例如,我们希望获得 30 岁以上的员工。不要遍历每个员工并检查员工是否超过 30 岁。相反,请利用 Pandas 库。它是apply()功能。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-text-color)">data</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">'Age'</span><span style="color:var(--syntax-text-color)">]</span><span style="color:var(--syntax-error-color)">.</span><span style="color:var(--syntax-text-color)">apply</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">lambda</span> <span style="color:var(--syntax-text-color)">x</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">x</span> <span style="color:var(--syntax-error-color)">></span> <span style="color:var(--syntax-literal-color)">30</span><span style="color:var(--syntax-text-color)">)]</span>

<span style="color:var(--syntax-comment-color)"># Result
#        Name  Age     City
#  0     Mark   34  Toronto
#  6  Hashima   40   London
</span></code></span></span>

概括

在 Python 中使用 pandas 探索、清理、转换和可视化数据是数据科学的一项基本技能。本系列只是为初学者介绍了有关 Python Pandas 的非常基础的知识。在我们的GitHub 项目上找到本系列的完整示例。

如果您通过该系列找到了自己有用的信息,请分享给其他人,发表评论并订阅我们以获取未来帖子的通知。我们将非常感谢您抽出宝贵时间阅读这篇文章

如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!微信公众号【Python大本营】等你来玩奥~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值