Skip to content

Commit 8a47e86

Browse files
committed
update
1 parent 9a32d1c commit 8a47e86

File tree

20 files changed

+864
-487
lines changed

20 files changed

+864
-487
lines changed

build/doctrees/environment.pickle

0 Bytes
Binary file not shown.

build/doctrees/目录/ch1.doctree

6 Bytes
Binary file not shown.

build/doctrees/目录/ch10.doctree

0 Bytes
Binary file not shown.

build/doctrees/目录/ch3.doctree

6.46 KB
Binary file not shown.

build/doctrees/目录/ch4.doctree

0 Bytes
Binary file not shown.

build/doctrees/目录/ch8.doctree

0 Bytes
Binary file not shown.

build/doctrees/目录/ch9.doctree

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

build/html/_sources/目录/ch3.rst.txt

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,17 @@
6060
6161
s['c': 'b': -2]
6262
63+
如果前后端点的值存在重复,即非唯一值,那么需要经过排序才能使用切片:
64+
65+
.. ipython:: python
66+
67+
try:
68+
s['a': 'b']
69+
except Exception as e:
70+
Err_Msg = e
71+
Err_Msg
72+
s.sort_index()['a': 'b']
73+
6374
【b】以整数为索引的 ``Series``
6475

6576
在使用数据的读入函数时,如果不特别指定所对应的列作为索引,那么会生成从0开始的整数索引作为默认索引。当然,任意一组符合长度要求的整数都可以作为索引。
@@ -377,21 +388,46 @@
377388
df_multi = df.set_index(['School', 'Grade'])
378389
df_multi.head()
379390
380-
由于多级索引中的单个元素以元组为单位,因此之前在第一节介绍的 ``loc`` 和 ``iloc`` 方法完全可以照搬,只需把标量的位置替换成对应的元组,不过在索引前最好对 ``MultiIndex`` 进行排序以避免性能警告:
391+
由于多级索引中的单个元素以元组为单位,因此之前在第一节介绍的 ``loc`` 和 ``iloc`` 方法完全可以照搬,只需把标量的位置替换成对应的元组。
392+
393+
当传入元组列表或单个元组或返回前二者的函数时,需要先进行索引排序以避免性能警告:
381394

382395
.. ipython:: python
383396
384-
df_multi = df_multi.sort_index()
385-
df_multi.loc[('Fudan University', 'Junior')].head()
386-
df_multi.loc[[('Fudan University', 'Senior'),
397+
with warnings.catch_warnings():
398+
warnings.filterwarnings('error')
399+
try:
400+
df_multi.loc[('Fudan University', 'Junior')].head()
401+
except Warning as w:
402+
Warning_Msg = w
403+
Warning_Msg
404+
df_sorted = df_multi.sort_index()
405+
df_sorted.loc[('Fudan University', 'Junior')].head()
406+
df_sorted.loc[[('Fudan University', 'Senior'),
387407
('Shanghai Jiao Tong University', 'Freshman')]].head()
388-
df_multi.loc[df_multi.Weight > 70].head() # 布尔列表也是可用的
389-
df_multi.loc[lambda x:('Fudan University','Junior')].head()
408+
df_sorted.loc[df_sorted.Weight > 70].head() # 布尔列表也是可用的
409+
df_sorted.loc[lambda x:('Fudan University','Junior')].head()
390410
391-
.. admonition:: 练一练
392-
:class: hint
411+
当使用切片时需要注意,在单级别索引中只要切片端点元素是唯一的,那么就可以进行切片,但在多级索引中,无论元组在索引中是否重复出现,都必须经过排序才能使用切片,否则报错:
412+
413+
.. ipython:: python
414+
415+
try:
416+
df_multi.loc[('Fudan University', 'Senior'):].head()
417+
except Exception as e:
418+
Err_Msg = e
419+
Err_Msg
420+
df_sorted.loc[('Fudan University', 'Senior'):].head()
421+
df_unique = df.drop_duplicates(subset=['School','Grade']
422+
).set_index(['School', 'Grade'])
423+
df_unique.head()
393424
394-
与单层索引类似,若存在重复元素,则不能使用切片,请去除重复索引后给出一个元素切片的例子。
425+
try:
426+
df_unique.loc[('Fudan University', 'Senior'):].head()
427+
except Exception as e:
428+
Err_Msg = e
429+
Err_Msg
430+
df_unique.sort_index().loc[('Fudan University', 'Senior'):].head()
395431
396432
此外,在多级索引中的元组有一种特殊的用法,可以对多层的元素进行交叉组合后索引,但同时需要指定 ``loc`` 的列,全选则用 ``:`` 表示。其中,每一层需要选中的元素用列表存放,传入 ``loc`` 的形式为 ``[(level_0_list, level_1_list), cols]`` 。例如,想要得到所有北大和复旦的大二大三学生,可以如下写出:
397433

build/html/searchindex.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/html/目录/ch1.html

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -503,74 +503,74 @@ <h3>1. np数组的构造<a class="headerlink" href="#np" title="Permalink to thi
503503
<p>【c】随机矩阵: <code class="docutils literal notranslate"><span class="pre">np.random</span></code></p>
504504
<p>最常用的随机生成函数为 <code class="docutils literal notranslate"><span class="pre">rand,</span> <span class="pre">randn,</span> <span class="pre">randint,</span> <span class="pre">choice</span></code> ,它们分别表示0-1均匀分布的随机数组、标准正态的随机数组、随机整数组和随机列表抽样:</p>
505505
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [38]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="c1"># 生成服从0-1均匀分布的三个随机数</span>
506-
<span class="gh">Out[38]: </span><span class="go">array([0.04459277, 0.70822814, 0.72825652])</span>
506+
<span class="gh">Out[38]: </span><span class="go">array([0.6153947 , 0.88273666, 0.00543514])</span>
507507

508508
<span class="gp">In [39]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="c1"># 注意这里传入的不是元组,每个维度大小分开输入</span>
509509
<span class="gh">Out[39]: </span><span class="go"></span>
510-
<span class="go">array([[0.7086854 , 0.55065805, 0.24684969],</span>
511-
<span class="go"> [0.01502467, 0.12753788, 0.67763982],</span>
512-
<span class="go"> [0.61491281, 0.72367285, 0.35903761]])</span>
510+
<span class="go">array([[0.98101125, 0.02326537, 0.65705324],</span>
511+
<span class="go"> [0.03397158, 0.07922305, 0.55944787],</span>
512+
<span class="go"> [0.03126215, 0.85214473, 0.85844943]])</span>
513513
</pre></div>
514514
</div>
515515
<p>对于服从区间 <span class="math notranslate nohighlight">\(a\)</span><span class="math notranslate nohighlight">\(b\)</span> 上的均匀分布可以如下生成:</p>
516516
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [40]: </span><span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">15</span>
517517

518518
<span class="gp">In [41]: </span><span class="p">(</span><span class="n">b</span> <span class="o">-</span> <span class="n">a</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">+</span> <span class="n">a</span>
519-
<span class="gh">Out[41]: </span><span class="go">array([10.85277559, 5.42718874, 6.6127651 ])</span>
519+
<span class="gh">Out[41]: </span><span class="go">array([11.2770425 , 12.46941527, 8.75814737])</span>
520520
</pre></div>
521521
</div>
522522
<p>一般的,可以选择已有的库函数:</p>
523523
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [42]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
524-
<span class="gh">Out[42]: </span><span class="go">array([9.24865468, 9.50059861, 5.08912649])</span>
524+
<span class="gh">Out[42]: </span><span class="go">array([13.85234451, 9.1684829 , 7.30636836])</span>
525525
</pre></div>
526526
</div>
527527
<p><code class="docutils literal notranslate"><span class="pre">randn</span></code> 生成了 <span class="math notranslate nohighlight">\(N\rm{(\mathbf{0}, \mathbf{I})}\)</span> 的标准正态分布:</p>
528528
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [43]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
529-
<span class="gh">Out[43]: </span><span class="go">array([-0.55853584, -0.13854145, -0.70530864])</span>
529+
<span class="gh">Out[43]: </span><span class="go">array([-0.12094655, 1.66356431, -0.90127077])</span>
530530

531531
<span class="gp">In [44]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
532532
<span class="gh">Out[44]: </span><span class="go"></span>
533-
<span class="go">array([[ 1.30718089, 1.19663584],</span>
534-
<span class="go"> [ 0.47448249, -1.10435937]])</span>
533+
<span class="go">array([[-0.25825946, 0.10824804],</span>
534+
<span class="go"> [ 0.65975602, 0.50712147]])</span>
535535
</pre></div>
536536
</div>
537537
<p>对于服从方差为 <span class="math notranslate nohighlight">\(\sigma^2\)</span> 均值为 <span class="math notranslate nohighlight">\(\mu\)</span> 的一元正态分布可以如下生成:</p>
538538
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [45]: </span><span class="n">sigma</span><span class="p">,</span> <span class="n">mu</span> <span class="o">=</span> <span class="mf">2.5</span><span class="p">,</span> <span class="mi">3</span>
539539

540540
<span class="gp">In [46]: </span><span class="n">mu</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">*</span> <span class="n">sigma</span>
541-
<span class="gh">Out[46]: </span><span class="go">array([ 4.00657339, 4.56976171, -0.29177403])</span>
541+
<span class="gh">Out[46]: </span><span class="go">array([5.91026277, 3.02197811, 7.51099581])</span>
542542
</pre></div>
543543
</div>
544544
<p>同样的,也可选择从已有函数生成:</p>
545545
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [47]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mf">2.5</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
546-
<span class="gh">Out[47]: </span><span class="go">array([4.15032959, 5.37686641, 5.8810344 ])</span>
546+
<span class="gh">Out[47]: </span><span class="go">array([ 6.06441723, -0.82517133, -1.47681533])</span>
547547
</pre></div>
548548
</div>
549549
<p><code class="docutils literal notranslate"><span class="pre">randint</span></code> 可以指定生成随机整数的最小值最大值(不包含)和维度大小:</p>
550550
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [48]: </span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># 生成5到14的随机整数</span>
551551

552552
<span class="gp">In [49]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
553553
<span class="gh">Out[49]: </span><span class="go"></span>
554-
<span class="go">array([[10, 9],</span>
555-
<span class="go"> [13, 5]])</span>
554+
<span class="go">array([[ 7, 13],</span>
555+
<span class="go"> [ 7, 12]])</span>
556556
</pre></div>
557557
</div>
558558
<p><code class="docutils literal notranslate"><span class="pre">choice</span></code> 可以从给定的列表中,以一定概率和方式抽取结果,当不指定概率时为均匀采样,默认抽取方式为有放回抽样:</p>
559559
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [50]: </span><span class="n">my_list</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;c&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">]</span>
560560

561561
<span class="gp">In [51]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">my_list</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">,</span> <span class="mf">0.1</span> <span class="p">,</span><span class="mf">0.1</span><span class="p">])</span>
562-
<span class="gh">Out[51]: </span><span class="go">array([&#39;b&#39;, &#39;d&#39;], dtype=&#39;&lt;U1&#39;)</span>
562+
<span class="gh">Out[51]: </span><span class="go">array([&#39;b&#39;, &#39;a&#39;], dtype=&#39;&lt;U1&#39;)</span>
563563

564564
<span class="gp">In [52]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">my_list</span><span class="p">,</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span>
565565
<span class="gh">Out[52]: </span><span class="go"></span>
566-
<span class="go">array([[&#39;a&#39;, &#39;d&#39;, &#39;b&#39;],</span>
567-
<span class="go"> [&#39;a&#39;, &#39;c&#39;, &#39;a&#39;],</span>
568-
<span class="go"> [&#39;b&#39;, &#39;d&#39;, &#39;d&#39;]], dtype=&#39;&lt;U1&#39;)</span>
566+
<span class="go">array([[&#39;a&#39;, &#39;c&#39;, &#39;c&#39;],</span>
567+
<span class="go"> [&#39;d&#39;, &#39;c&#39;, &#39;d&#39;],</span>
568+
<span class="go"> [&#39;a&#39;, &#39;a&#39;, &#39;d&#39;]], dtype=&#39;&lt;U1&#39;)</span>
569569
</pre></div>
570570
</div>
571571
<p>当返回的元素个数与原列表相同时,不放回抽样等价于使用 <code class="docutils literal notranslate"><span class="pre">permutation</span></code> 函数,即打散原列表:</p>
572572
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [53]: </span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">permutation</span><span class="p">(</span><span class="n">my_list</span><span class="p">)</span>
573-
<span class="gh">Out[53]: </span><span class="go">array([&#39;b&#39;, &#39;a&#39;, &#39;d&#39;, &#39;c&#39;], dtype=&#39;&lt;U1&#39;)</span>
573+
<span class="gh">Out[53]: </span><span class="go">array([&#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;a&#39;], dtype=&#39;&lt;U1&#39;)</span>
574574
</pre></div>
575575
</div>
576576
<p>最后,需要提到的是随机种子,它能够固定随机数的输出结果:</p>

build/html/目录/ch10.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,19 +1009,19 @@ <h3>1. 滑动窗口<a class="headerlink" href="#id10" title="Permalink to this h
10091009
<span class="gp">In [107]: </span><span class="n">r</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">rolling</span><span class="p">(</span><span class="s1">&#39;30D&#39;</span><span class="p">)</span>
10101010

10111011
<span class="gp">In [108]: </span><span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
1012-
<span class="gh">Out[108]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x1daaf67d088&gt;]</span>
1012+
<span class="gh">Out[108]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x263b80c8748&gt;]</span>
10131013

10141014
<span class="gp">In [109]: </span><span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;BOLL LINES&#39;</span><span class="p">)</span>
10151015
<span class="gh">Out[109]: </span><span class="go">Text(0.5, 1.0, &#39;BOLL LINES&#39;)</span>
10161016

10171017
<span class="gp">In [110]: </span><span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">mean</span><span class="p">())</span>
1018-
<span class="gh">Out[110]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x1daaf64f148&gt;]</span>
1018+
<span class="gh">Out[110]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x263b80b8f88&gt;]</span>
10191019

10201020
<span class="gp">In [111]: </span><span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">+</span><span class="n">r</span><span class="o">.</span><span class="n">std</span><span class="p">()</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span>
1021-
<span class="gh">Out[111]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x1daaf62e848&gt;]</span>
1021+
<span class="gh">Out[111]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x263b80a3288&gt;]</span>
10221022

10231023
<span class="gp">In [112]: </span><span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">-</span><span class="n">r</span><span class="o">.</span><span class="n">std</span><span class="p">()</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span>
1024-
<span class="gh">Out[112]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x1daaf5fd9c8&gt;]</span>
1024+
<span class="gh">Out[112]: </span><span class="go">[&lt;matplotlib.lines.Line2D at 0x263b73c3f88&gt;]</span>
10251025
</pre></div>
10261026
</div>
10271027
<a class="reference internal image-reference" href="../_images/ch10.png"><img alt="../_images/ch10.png" src="../_images/ch10.png" style="width: 400px;" /></a>

0 commit comments

Comments
 (0)