{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# pandas层次化索引" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. 创建多层行索引" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1) 隐式构造\n", "\n", "最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Series也可以创建多层索引" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "张三 期中 40\n", " 期末 79\n", "李四 期中 88\n", " 期末 109\n", "Michael 期中 146\n", " 期末 51\n", "dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = Series(data = np.random.randint(0,150,size = 6),\n", " index =[['张三','张三','李四','李四','Michael','Michael'],['期中','期末','期中','期末','期中','期末']] )\n", "s" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from pandas import Series,DataFrame" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Python</th>\n", " <th>Java</th>\n", " <th>PHP</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">张三</th>\n", " <th>期中</th>\n", " <td>87</td>\n", " <td>65</td>\n", " <td>129</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>147</td>\n", " <td>31</td>\n", " <td>120</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">李四</th>\n", " <th>期中</th>\n", " <td>38</td>\n", " <td>31</td>\n", " <td>74</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>38</td>\n", " <td>86</td>\n", " <td>99</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">Michael</th>\n", " <th>期中</th>\n", " <td>107</td>\n", " <td>123</td>\n", " <td>46</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>21</td>\n", " <td>149</td>\n", " <td>72</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Python Java PHP\n", "张三 期中 87 65 129\n", " 期末 147 31 120\n", "李四 期中 38 31 74\n", " 期末 38 86 99\n", "Michael 期中 107 123 46\n", " 期末 21 149 72" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = DataFrame(data = np.random.randint(0,150,size = (6,3)),\n", " columns = ['Python','Java','PHP'],\n", " index = [['张三','张三','李四','李四','Michael','Michael'],['期中','期末','期中','期末','期中','期末']])\n", "#隐式创建\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2) 显示构造pd.MultiIndex" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 使用数组" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">张三</th>\n", " <th>期中</th>\n", " <td>33</td>\n", " <td>61</td>\n", " <td>104</td>\n", " <td>117</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>45</td>\n", " <td>20</td>\n", " <td>94</td>\n", " <td>61</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">李四</th>\n", " <th>期中</th>\n", " <td>39</td>\n", " <td>94</td>\n", " <td>144</td>\n", " <td>4</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>38</td>\n", " <td>67</td>\n", " <td>113</td>\n", " <td>111</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">Michael</th>\n", " <th>期中</th>\n", " <td>33</td>\n", " <td>5</td>\n", " <td>39</td>\n", " <td>135</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>117</td>\n", " <td>87</td>\n", " <td>5</td>\n", " <td>118</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "张三 期中 33 61 104 117\n", " 期末 45 20 94 61\n", "李四 期中 39 94 144 4\n", " 期末 38 67 113 111\n", "Michael 期中 33 5 39 135\n", " 期末 117 87 5 118" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df2 = DataFrame(data = np.random.randint(0,150,size = (6,4)),\n", " columns = [\"Spring\",'Summer','Autumn','Winter'],\n", " index = pd.MultiIndex.from_arrays([['张三','张三','李四','李四','Michael','Michael'],['期中','期末','期中','期末','期中','期末']]))\n", "\n", "df2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 使用tuple" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">张三</th>\n", " <th>期中</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">李四</th>\n", " <th>期中</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">Sara</th>\n", " <th>期中</th>\n", " <td>14</td>\n", " <td>114</td>\n", " <td>146</td>\n", " <td>147</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>108</td>\n", " <td>114</td>\n", " <td>73</td>\n", " <td>86</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "张三 期中 31 57 124 34\n", " 期末 134 20 60 55\n", "李四 期中 33 70 128 47\n", " 期末 9 55 101 117\n", "Sara 期中 14 114 146 147\n", " 期末 108 114 73 86" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3 = DataFrame(data = np.random.randint(0,150,size = (6,4)),\n", " columns = [\"Spring\",'Summer','Autumn','Winter'],\n", " index = pd.MultiIndex.from_tuples([('张三','期中'),('张三','期末'),('李四','期中'),('李四','期末'),('Sara','期中'),('Sara','期末')]))\n", "\n", "df3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 使用product\n", "\n", " 最简单,推荐使用" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"4\" valign=\"top\">张三</th>\n", " <th rowspan=\"2\" valign=\"top\">middle</th>\n", " <th>A</th>\n", " <td>61</td>\n", " <td>58</td>\n", " <td>64</td>\n", " <td>105</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>118</td>\n", " <td>121</td>\n", " <td>8</td>\n", " <td>81</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">end</th>\n", " <th>A</th>\n", " <td>135</td>\n", " <td>147</td>\n", " <td>141</td>\n", " <td>107</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>97</td>\n", " <td>29</td>\n", " <td>31</td>\n", " <td>56</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"4\" valign=\"top\">Sara</th>\n", " <th rowspan=\"2\" valign=\"top\">middle</th>\n", " <th>A</th>\n", " <td>111</td>\n", " <td>90</td>\n", " <td>9</td>\n", " <td>128</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>40</td>\n", " <td>95</td>\n", " <td>149</td>\n", " <td>44</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">end</th>\n", " <th>A</th>\n", " <td>9</td>\n", " <td>8</td>\n", " <td>97</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>70</td>\n", " <td>16</td>\n", " <td>60</td>\n", " <td>10</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"4\" valign=\"top\">Lisa</th>\n", " <th rowspan=\"2\" valign=\"top\">middle</th>\n", " <th>A</th>\n", " <td>23</td>\n", " <td>142</td>\n", " <td>65</td>\n", " <td>67</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>75</td>\n", " <td>113</td>\n", " <td>122</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">end</th>\n", " <th>A</th>\n", " <td>126</td>\n", " <td>15</td>\n", " <td>138</td>\n", " <td>28</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>125</td>\n", " <td>118</td>\n", " <td>1</td>\n", " <td>110</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "张三 middle A 61 58 64 105\n", " B 118 121 8 81\n", " end A 135 147 141 107\n", " B 97 29 31 56\n", "Sara middle A 111 90 9 128\n", " B 40 95 149 44\n", " end A 9 8 97 0\n", " B 70 16 60 10\n", "Lisa middle A 23 142 65 67\n", " B 75 113 122 0\n", " end A 126 15 138 28\n", " B 125 118 1 110" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df4 = DataFrame(data = np.random.randint(0,150,size = (12,4)),\n", " columns = [\"Spring\",'Summer','Autumn','Winter'],\n", " index = pd.MultiIndex.from_product([['张三','Sara','Lisa'],['middle','end'],list('AB')]))\n", "\n", "df4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "============================================\n", "\n", "练习8:\n", "\n", "1. 创建一个DataFrame,表示出张三李四期中期末各科成绩\n", "\n", "============================================" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. 多层列索引" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "除了行索引index,列索引columns也能用同样的方法创建多层索引" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr>\n", " <th></th>\n", " <th colspan=\"4\" halign=\"left\">张三</th>\n", " <th colspan=\"4\" halign=\"left\">Sara</th>\n", " <th colspan=\"4\" halign=\"left\">Lisa</th>\n", " </tr>\n", " <tr>\n", " <th></th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " </tr>\n", " <tr>\n", " <th></th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>Spring</th>\n", " <td>131</td>\n", " <td>7</td>\n", " <td>14</td>\n", " <td>21</td>\n", " <td>119</td>\n", " <td>72</td>\n", " <td>92</td>\n", " <td>139</td>\n", " <td>132</td>\n", " <td>63</td>\n", " <td>142</td>\n", " <td>56</td>\n", " </tr>\n", " <tr>\n", " <th>Summer</th>\n", " <td>105</td>\n", " <td>118</td>\n", " <td>122</td>\n", " <td>19</td>\n", " <td>17</td>\n", " <td>133</td>\n", " <td>100</td>\n", " <td>36</td>\n", " <td>120</td>\n", " <td>20</td>\n", " <td>129</td>\n", " <td>136</td>\n", " </tr>\n", " <tr>\n", " <th>Autumn</th>\n", " <td>100</td>\n", " <td>121</td>\n", " <td>32</td>\n", " <td>53</td>\n", " <td>109</td>\n", " <td>57</td>\n", " <td>104</td>\n", " <td>125</td>\n", " <td>96</td>\n", " <td>68</td>\n", " <td>76</td>\n", " <td>89</td>\n", " </tr>\n", " <tr>\n", " <th>Winter</th>\n", " <td>73</td>\n", " <td>16</td>\n", " <td>54</td>\n", " <td>42</td>\n", " <td>74</td>\n", " <td>48</td>\n", " <td>129</td>\n", " <td>25</td>\n", " <td>56</td>\n", " <td>39</td>\n", " <td>28</td>\n", " <td>113</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " 张三 Sara Lisa \n", " middle end middle end middle end \n", " A B A B A B A B A B A B\n", "Spring 131 7 14 21 119 72 92 139 132 63 142 56\n", "Summer 105 118 122 19 17 133 100 36 120 20 129 136\n", "Autumn 100 121 32 53 109 57 104 125 96 68 76 89\n", "Winter 73 16 54 42 74 48 129 25 56 39 28 113" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df5 = DataFrame(data = np.random.randint(0,150,size = (4,12)),\n", " columns = pd.MultiIndex.from_product([['张三','Sara','Lisa'],['middle','end'],list('AB')]),\n", " index = [\"Spring\",'Summer','Autumn','Winter'])\n", "\n", "df5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. 多层索引对象的索引与切片操作" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1)Series的操作" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "【重要】对于Series来说,直接中括号[]与使用.loc()完全一样,因此,推荐使用中括号索引和切片。" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "张三 期中 40\n", " 期末 79\n", "李四 期中 88\n", " 期末 109\n", "Michael 期中 146\n", " 期末 51\n", "dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "张三 期中 40\n", " 期末 79\n", "李四 期中 88\n", " 期末 109\n", "静静 期中 146\n", " 期末 51\n", "dtype: int64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#多层索引进行切片时,有些汉字,或者英文,不识别,运行异常,并不是代码的问题,自身的bug\n", "\n", "s.index = pd.MultiIndex.from_product([['张三','李四','静静'],['期中','期末']])\n", "s" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "张三 期中 40\n", " 期末 79\n", "李四 期中 88\n", " 期末 109\n", "dtype: int64" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s['张三':'李四']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(1) 索引" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "期中 40\n", "期末 79\n", "dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s['张三']" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "40" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s['张三','期中']" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [ { "ename": "KeyError", "evalue": "'the label [期中] is not in the [index]'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_has_valid_type\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1433\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontains\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1434\u001b[0;31m \u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1435\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36merror\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1428\u001b[0m raise KeyError(\"the label [%s] is not in the [%s]\" %\n\u001b[0;32m-> 1429\u001b[0;31m (key, self.obj._get_axis_name(axis)))\n\u001b[0m\u001b[1;32m 1430\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 'the label [期中] is not in the [index]'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-14-52a5135a3116>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'期中'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1326\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1327\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1328\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1329\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1330\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_is_scalar_access\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1549\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1550\u001b[0m \u001b[0;31m# fall thru to straight lookup\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1551\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_has_valid_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1552\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1553\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_has_valid_type\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1440\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1441\u001b[0m \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1442\u001b[0;31m \u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1443\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1444\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36merror\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1427\u001b[0m \"key\")\n\u001b[1;32m 1428\u001b[0m raise KeyError(\"the label [%s] is not in the [%s]\" %\n\u001b[0;32m-> 1429\u001b[0;31m (key, self.obj._get_axis_name(axis)))\n\u001b[0m\u001b[1;32m 1430\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1431\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 'the label [期中] is not in the [index]'" ] } ], "source": [ "#多层索引,有层的概念\n", "s.loc['期中']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "109" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s.loc['李四','期末']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(2) 切片" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "张三 期中 40\n", " 期末 79\n", "李四 期中 88\n", "dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s.iloc[0:3]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [ { "ename": "UnsortedIndexError", "evalue": "'Key length (1) was greater than MultiIndex lexsort depth (0)'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mUnsortedIndexError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-20-bc2dcaf84d2d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ms\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'张三'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'Michael'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 640\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_bool_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 642\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_with\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 643\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 644\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_with\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m_get_with\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 645\u001b[0m \u001b[0;31m# other: fancy integer or otherwise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 646\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mslice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 647\u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_convert_slice_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'getitem'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 648\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 649\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36m_convert_slice_indexer\u001b[0;34m(self, key, kind)\u001b[0m\n\u001b[1;32m 1405\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1406\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1407\u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mslice_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1408\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1409\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_index_slice\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mslice_indexer\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 3348\u001b[0m \"\"\"\n\u001b[1;32m 3349\u001b[0m start_slice, end_slice = self.slice_locs(start, end, step=step,\n\u001b[0;32m-> 3350\u001b[0;31m kind=kind)\n\u001b[0m\u001b[1;32m 3351\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3352\u001b[0m \u001b[0;31m# return a slice\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/multi.py\u001b[0m in \u001b[0;36mslice_locs\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 1908\u001b[0m \u001b[0;31m# This function adds nothing to its parent implementation (the magic\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1909\u001b[0m \u001b[0;31m# happens in get_slice_bound method), but it adds meaningful doc.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1910\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mMultiIndex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mslice_locs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1911\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1912\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_partial_tup_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mside\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'left'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mslice_locs\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 3536\u001b[0m \u001b[0mstart_slice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3537\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstart\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3538\u001b[0;31m \u001b[0mstart_slice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_slice_bound\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'left'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3539\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstart_slice\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3540\u001b[0m \u001b[0mstart_slice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/multi.py\u001b[0m in \u001b[0;36mget_slice_bound\u001b[0;34m(self, label, side, kind)\u001b[0m\n\u001b[1;32m 1879\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1880\u001b[0m \u001b[0mlabel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1881\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_partial_tup_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mside\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mside\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1882\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1883\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mslice_locs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/multi.py\u001b[0m in \u001b[0;36m_partial_tup_index\u001b[0;34m(self, tup, side)\u001b[0m\n\u001b[1;32m 1915\u001b[0m \u001b[0;34m'Key length (%d) was greater than MultiIndex'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1916\u001b[0m \u001b[0;34m' lexsort depth (%d)'\u001b[0m \u001b[0;34m%\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1917\u001b[0;31m (len(tup), self.lexsort_depth))\n\u001b[0m\u001b[1;32m 1918\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1919\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mUnsortedIndexError\u001b[0m: 'Key length (1) was greater than MultiIndex lexsort depth (0)'" ] } ], "source": [ "s['张三':'Michael']" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [ { "ename": "UnsortedIndexError", "evalue": "'Key length (1) was greater than MultiIndex lexsort depth (0)'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mUnsortedIndexError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-21-c37724b918c9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'张三'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'Michael'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1326\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1327\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1328\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1329\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1330\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_is_scalar_access\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1504\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mslice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1505\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_has_valid_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1506\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_slice_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1507\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mis_bool_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1508\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getbool_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_get_slice_axis\u001b[0;34m(self, slice_obj, axis)\u001b[0m\n\u001b[1;32m 1354\u001b[0m \u001b[0mlabels\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1355\u001b[0m indexer = labels.slice_indexer(slice_obj.start, slice_obj.stop,\n\u001b[0;32m-> 1356\u001b[0;31m slice_obj.step, kind=self.name)\n\u001b[0m\u001b[1;32m 1357\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1358\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mslice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mslice_indexer\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 3348\u001b[0m \"\"\"\n\u001b[1;32m 3349\u001b[0m start_slice, end_slice = self.slice_locs(start, end, step=step,\n\u001b[0;32m-> 3350\u001b[0;31m kind=kind)\n\u001b[0m\u001b[1;32m 3351\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3352\u001b[0m \u001b[0;31m# return a slice\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/multi.py\u001b[0m in \u001b[0;36mslice_locs\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 1908\u001b[0m \u001b[0;31m# This function adds nothing to its parent implementation (the magic\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1909\u001b[0m \u001b[0;31m# happens in get_slice_bound method), but it adds meaningful doc.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1910\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mMultiIndex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mslice_locs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1911\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1912\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_partial_tup_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mside\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'left'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mslice_locs\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 3536\u001b[0m \u001b[0mstart_slice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3537\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstart\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3538\u001b[0;31m \u001b[0mstart_slice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_slice_bound\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'left'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3539\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstart_slice\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3540\u001b[0m \u001b[0mstart_slice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/multi.py\u001b[0m in \u001b[0;36mget_slice_bound\u001b[0;34m(self, label, side, kind)\u001b[0m\n\u001b[1;32m 1879\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1880\u001b[0m \u001b[0mlabel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1881\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_partial_tup_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mside\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mside\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1882\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1883\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mslice_locs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/multi.py\u001b[0m in \u001b[0;36m_partial_tup_index\u001b[0;34m(self, tup, side)\u001b[0m\n\u001b[1;32m 1915\u001b[0m \u001b[0;34m'Key length (%d) was greater than MultiIndex'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1916\u001b[0m \u001b[0;34m' lexsort depth (%d)'\u001b[0m \u001b[0;34m%\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1917\u001b[0;31m (len(tup), self.lexsort_depth))\n\u001b[0m\u001b[1;32m 1918\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1919\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mUnsortedIndexError\u001b[0m: 'Key length (1) was greater than MultiIndex lexsort depth (0)'" ] } ], "source": [ "s.loc['张三':'Michael']" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "A e 46\n", " f 93\n", "B e 76\n", " f 77\n", "C e 61\n", " f 125\n", "dtype: int64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s2 = Series(data = np.random.randint(0,150,size = 6),index = pd.MultiIndex.from_product([list('ABC'),['e','f']]))\n", "s2" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "A e 46\n", " f 93\n", "B e 76\n", " f 77\n", "C e 61\n", " f 125\n", "dtype: int64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s2['A':'C']" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "A e 46\n", " f 93\n", "B e 76\n", " f 77\n", "dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s2.loc['A':'B']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2)DataFrame的操作" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(1) 可以直接使用列名称来进行列索引" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">张三</th>\n", " <th>期中</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">李四</th>\n", " <th>期中</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">Sara</th>\n", " <th>期中</th>\n", " <td>14</td>\n", " <td>114</td>\n", " <td>146</td>\n", " <td>147</td>\n", " </tr>\n", " <tr>\n", " <th>期末</th>\n", " <td>108</td>\n", " <td>114</td>\n", " <td>73</td>\n", " <td>86</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "张三 期中 31 57 124 34\n", " 期末 134 20 60 55\n", "李四 期中 33 70 128 47\n", " 期末 9 55 101 117\n", "Sara 期中 14 114 146 147\n", " 期末 108 114 73 86" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "31" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3['Spring']['张三','期中']" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true }, "outputs": [ { "ename": "KeyError", "evalue": "('Spring', '李四')", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2441\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2442\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2443\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5280)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5126)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item (pandas/_libs/hashtable.c:20523)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item (pandas/_libs/hashtable.c:20477)\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: ('Spring', '李四')", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-42-fa2185c7b00c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf3\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Spring'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'李四'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1962\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1963\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1964\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1965\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1966\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1969\u001b[0m \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1970\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1971\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1972\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1973\u001b[0m \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m 1643\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1644\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1645\u001b[0;31m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1646\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1647\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m 3588\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3589\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3590\u001b[0;31m \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3591\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3592\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2442\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2443\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2444\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2445\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2446\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5280)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5126)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item (pandas/_libs/hashtable.c:20523)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item (pandas/_libs/hashtable.c:20477)\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: ('Spring', '李四')" ] } ], "source": [ "#DataFrame多层索引和之前索引类似\n", "#df [] 代表着列索引\n", "df3['Spring','李四']" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">C</th>\n", " <th>a</th>\n", " <td>14</td>\n", " <td>114</td>\n", " <td>146</td>\n", " <td>147</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>108</td>\n", " <td>114</td>\n", " <td>73</td>\n", " <td>86</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47\n", " b 9 55 101 117\n", "C a 14 114 146 147\n", " b 108 114 73 86" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.index = pd.MultiIndex.from_product([list('ABC'),list('ab')])\n", "df3" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47\n", " b 9 55 101 117" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#使用切片\n", "df3['A':'B']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(2) 使用行索引需要用loc()等函数\n", "\n", "【极其重要】推荐使用loc()函数" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "注意在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "a 31 57 124 34\n", "b 134 20 60 55" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.loc['A']" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "Spring 33\n", "Summer 70\n", "Autumn 128\n", "Winter 47\n", "Name: (B, a), dtype: int64" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.loc['B','a']" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": true }, "outputs": [ { "ename": "KeyError", "evalue": "'the label [a] is not in the [index]'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_has_valid_type\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1433\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontains\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1434\u001b[0;31m \u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1435\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36merror\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1428\u001b[0m raise KeyError(\"the label [%s] is not in the [%s]\" %\n\u001b[0;32m-> 1429\u001b[0;31m (key, self.obj._get_axis_name(axis)))\n\u001b[0m\u001b[1;32m 1430\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 'the label [a] is not in the [index]'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m<ipython-input-51-178fc9e30662>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'a'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1326\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1327\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1328\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1329\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1330\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_is_scalar_access\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1549\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1550\u001b[0m \u001b[0;31m# fall thru to straight lookup\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1551\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_has_valid_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1552\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_label\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1553\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_has_valid_type\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1440\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1441\u001b[0m \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1442\u001b[0;31m \u001b[0merror\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1443\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1444\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python3.5/dist-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36merror\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1427\u001b[0m \"key\")\n\u001b[1;32m 1428\u001b[0m raise KeyError(\"the label [%s] is not in the [%s]\" %\n\u001b[0;32m-> 1429\u001b[0;31m (key, self.obj._get_axis_name(axis)))\n\u001b[0m\u001b[1;32m 1430\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1431\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 'the label [a] is not in the [index]'" ] } ], "source": [ "df3.loc['a']" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47\n", " b 9 55 101 117" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.loc[['A','B']]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47\n", " b 9 55 101 117" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.loc['A':'B']" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.iloc[0:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "============================================\n", "\n", "练习9:\n", "\n", "1. 分析比较Series和DataFrame各种索引的方式,熟练掌握.loc()方法\n", "\n", "2. 假设张三再一次在期中考试的时候因为特殊原因放弃英语考试,如何实现?\n", "\n", "============================================" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## 4. 索引的堆(stack)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- ``stack()``\n", "- ``unstack()``" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "小技巧】使用stack()的时候,level等于哪一个,哪一个就消失,出现在行里。" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr>\n", " <th></th>\n", " <th colspan=\"4\" halign=\"left\">张三</th>\n", " <th colspan=\"4\" halign=\"left\">Sara</th>\n", " <th colspan=\"4\" halign=\"left\">Lisa</th>\n", " </tr>\n", " <tr>\n", " <th></th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " </tr>\n", " <tr>\n", " <th></th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>Spring</th>\n", " <td>131</td>\n", " <td>7</td>\n", " <td>14</td>\n", " <td>21</td>\n", " <td>119</td>\n", " <td>72</td>\n", " <td>92</td>\n", " <td>139</td>\n", " <td>132</td>\n", " <td>63</td>\n", " <td>142</td>\n", " <td>56</td>\n", " </tr>\n", " <tr>\n", " <th>Summer</th>\n", " <td>105</td>\n", " <td>118</td>\n", " <td>122</td>\n", " <td>19</td>\n", " <td>17</td>\n", " <td>133</td>\n", " <td>100</td>\n", " <td>36</td>\n", " <td>120</td>\n", " <td>20</td>\n", " <td>129</td>\n", " <td>136</td>\n", " </tr>\n", " <tr>\n", " <th>Autumn</th>\n", " <td>100</td>\n", " <td>121</td>\n", " <td>32</td>\n", " <td>53</td>\n", " <td>109</td>\n", " <td>57</td>\n", " <td>104</td>\n", " <td>125</td>\n", " <td>96</td>\n", " <td>68</td>\n", " <td>76</td>\n", " <td>89</td>\n", " </tr>\n", " <tr>\n", " <th>Winter</th>\n", " <td>73</td>\n", " <td>16</td>\n", " <td>54</td>\n", " <td>42</td>\n", " <td>74</td>\n", " <td>48</td>\n", " <td>129</td>\n", " <td>25</td>\n", " <td>56</td>\n", " <td>39</td>\n", " <td>28</td>\n", " <td>113</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " 张三 Sara Lisa \n", " middle end middle end middle end \n", " A B A B A B A B A B A B\n", "Spring 131 7 14 21 119 72 92 139 132 63 142 56\n", "Summer 105 118 122 19 17 133 100 36 120 20 129 136\n", "Autumn 100 121 32 53 109 57 104 125 96 68 76 89\n", "Winter 73 16 54 42 74 48 129 25 56 39 28 113" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df5" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr>\n", " <th></th>\n", " <th></th>\n", " <th colspan=\"2\" halign=\"left\">end</th>\n", " <th colspan=\"2\" halign=\"left\">middle</th>\n", " </tr>\n", " <tr>\n", " <th></th>\n", " <th></th>\n", " <th>A</th>\n", " <th>B</th>\n", " <th>A</th>\n", " <th>B</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"3\" valign=\"top\">Spring</th>\n", " <th>Lisa</th>\n", " <td>142</td>\n", " <td>56</td>\n", " <td>132</td>\n", " <td>63</td>\n", " </tr>\n", " <tr>\n", " <th>Sara</th>\n", " <td>92</td>\n", " <td>139</td>\n", " <td>119</td>\n", " <td>72</td>\n", " </tr>\n", " <tr>\n", " <th>张三</th>\n", " <td>14</td>\n", " <td>21</td>\n", " <td>131</td>\n", " <td>7</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"3\" valign=\"top\">Summer</th>\n", " <th>Lisa</th>\n", " <td>129</td>\n", " <td>136</td>\n", " <td>120</td>\n", " <td>20</td>\n", " </tr>\n", " <tr>\n", " <th>Sara</th>\n", " <td>100</td>\n", " <td>36</td>\n", " <td>17</td>\n", " <td>133</td>\n", " </tr>\n", " <tr>\n", " <th>张三</th>\n", " <td>122</td>\n", " <td>19</td>\n", " <td>105</td>\n", " <td>118</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"3\" valign=\"top\">Autumn</th>\n", " <th>Lisa</th>\n", " <td>76</td>\n", " <td>89</td>\n", " <td>96</td>\n", " <td>68</td>\n", " </tr>\n", " <tr>\n", " <th>Sara</th>\n", " <td>104</td>\n", " <td>125</td>\n", " <td>109</td>\n", " <td>57</td>\n", " </tr>\n", " <tr>\n", " <th>张三</th>\n", " <td>32</td>\n", " <td>53</td>\n", " <td>100</td>\n", " <td>121</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"3\" valign=\"top\">Winter</th>\n", " <th>Lisa</th>\n", " <td>28</td>\n", " <td>113</td>\n", " <td>56</td>\n", " <td>39</td>\n", " </tr>\n", " <tr>\n", " <th>Sara</th>\n", " <td>129</td>\n", " <td>25</td>\n", " <td>74</td>\n", " <td>48</td>\n", " </tr>\n", " <tr>\n", " <th>张三</th>\n", " <td>54</td>\n", " <td>42</td>\n", " <td>73</td>\n", " <td>16</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " end middle \n", " A B A B\n", "Spring Lisa 142 56 132 63\n", " Sara 92 139 119 72\n", " 张三 14 21 131 7\n", "Summer Lisa 129 136 120 20\n", " Sara 100 36 17 133\n", " 张三 122 19 105 118\n", "Autumn Lisa 76 89 96 68\n", " Sara 104 125 109 57\n", " 张三 32 53 100 121\n", "Winter Lisa 28 113 56 39\n", " Sara 129 25 74 48\n", " 张三 54 42 73 16" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df5.stack(level = 0)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr>\n", " <th></th>\n", " <th></th>\n", " <th colspan=\"2\" halign=\"left\">Spring</th>\n", " <th colspan=\"2\" halign=\"left\">Summer</th>\n", " <th colspan=\"2\" halign=\"left\">Autumn</th>\n", " <th colspan=\"2\" halign=\"left\">Winter</th>\n", " </tr>\n", " <tr>\n", " <th></th>\n", " <th></th>\n", " <th>end</th>\n", " <th>middle</th>\n", " <th>end</th>\n", " <th>middle</th>\n", " <th>end</th>\n", " <th>middle</th>\n", " <th>end</th>\n", " <th>middle</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">Lisa</th>\n", " <th>A</th>\n", " <td>126</td>\n", " <td>23</td>\n", " <td>15</td>\n", " <td>142</td>\n", " <td>138</td>\n", " <td>65</td>\n", " <td>28</td>\n", " <td>67</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>125</td>\n", " <td>75</td>\n", " <td>118</td>\n", " <td>113</td>\n", " <td>1</td>\n", " <td>122</td>\n", " <td>110</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">Sara</th>\n", " <th>A</th>\n", " <td>9</td>\n", " <td>111</td>\n", " <td>8</td>\n", " <td>90</td>\n", " <td>97</td>\n", " <td>9</td>\n", " <td>0</td>\n", " <td>128</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>70</td>\n", " <td>40</td>\n", " <td>16</td>\n", " <td>95</td>\n", " <td>60</td>\n", " <td>149</td>\n", " <td>10</td>\n", " <td>44</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">张三</th>\n", " <th>A</th>\n", " <td>135</td>\n", " <td>61</td>\n", " <td>147</td>\n", " <td>58</td>\n", " <td>141</td>\n", " <td>64</td>\n", " <td>107</td>\n", " <td>105</td>\n", " </tr>\n", " <tr>\n", " <th>B</th>\n", " <td>97</td>\n", " <td>118</td>\n", " <td>29</td>\n", " <td>121</td>\n", " <td>31</td>\n", " <td>8</td>\n", " <td>56</td>\n", " <td>81</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter \n", " end middle end middle end middle end middle\n", "Lisa A 126 23 15 142 138 65 28 67\n", " B 125 75 118 113 1 122 110 0\n", "Sara A 9 111 8 90 97 9 0 128\n", " B 70 40 16 95 60 149 10 44\n", "张三 A 135 61 147 58 141 64 107 105\n", " B 97 118 29 121 31 8 56 81" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df4.unstack(level=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "【小技巧】使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "============================================\n", "\n", "练习10:\n", "\n", "1. 使用unstack()将ddd变为两行,分别为期中期末\n", "\n", "2. 使用unstack()将ddd变为四行,分别为四个科目\n", "\n", "============================================" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## 5. 聚合操作" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "【注意】\n", "\n", "- 需要指定axis\n", "\n", "- 【小技巧】和unstack()相反,聚合的时候,axis等于哪一个,哪一个就会进行计算。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "所谓的聚合操作:平均数,方差,最大值,最小值……" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">C</th>\n", " <th>a</th>\n", " <td>14</td>\n", " <td>114</td>\n", " <td>146</td>\n", " <td>147</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>108</td>\n", " <td>114</td>\n", " <td>73</td>\n", " <td>86</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47\n", " b 9 55 101 117\n", "C a 14 114 146 147\n", " b 108 114 73 86" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "A a 61.50\n", " b 67.25\n", "B a 69.50\n", " b 70.50\n", "C a 105.25\n", " b 95.25\n", "dtype: float64" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3.mean(axis = 'columns')" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style>\n", " .dataframe thead tr:only-child th {\n", " text-align: right;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: left;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th></th>\n", " <th>Spring</th>\n", " <th>Summer</th>\n", " <th>Autumn</th>\n", " <th>Winter</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">A</th>\n", " <th>a</th>\n", " <td>31</td>\n", " <td>57</td>\n", " <td>124</td>\n", " <td>34</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>134</td>\n", " <td>20</td>\n", " <td>60</td>\n", " <td>55</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">B</th>\n", " <th>a</th>\n", " <td>33</td>\n", " <td>70</td>\n", " <td>128</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>9</td>\n", " <td>55</td>\n", " <td>101</td>\n", " <td>117</td>\n", " </tr>\n", " <tr>\n", " <th rowspan=\"2\" valign=\"top\">C</th>\n", " <th>a</th>\n", " <td>14</td>\n", " <td>114</td>\n", " <td>146</td>\n", " <td>147</td>\n", " </tr>\n", " <tr>\n", " <th>b</th>\n", " <td>108</td>\n", " <td>114</td>\n", " <td>73</td>\n", " <td>86</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Spring Summer Autumn Winter\n", "A a 31 57 124 34\n", " b 134 20 60 55\n", "B a 33 70 128 47\n", " b 9 55 101 117\n", "C a 14 114 146 147\n", " b 108 114 73 86" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "Spring 52.738664\n", "Summer 36.740532\n", "Autumn 33.571814\n", "Winter 44.086279\n", "dtype: float64" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#数据离散的程度,\n", "df3.std()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "============================================\n", "\n", "练习11:\n", "\n", "1. 计算各个科目期中期末平均成绩\n", "\n", "2. 计算各科目张三李四的最高分\n", "\n", "============================================" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }