{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "B37A5E9D1472412A8A2348BCCD338B86",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"Pandas 是基于 NumPy 的一种数据处理工具,该工具为了解决数据分析任务而创建。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法。\n",
"这些练习着重DataFrame和Series对象的基本操作,包括数据的索引、分组、统计和清洗。\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "408E7D614FB54B1D84A7B0A848C4C6F6",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## 基本操作"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EBBA275C49F24BAC8D5369F0674D34C6",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"1. 导入 Pandas 库并简写为 `pd`,并输出版本号"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"id": "DC71C3CB19FA450D9A22B0501097C7D9",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"'0.24.2'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"pd.__version__"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4BDAA047C88D4A7284FBB11C93331AF5",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"2.从列表创建 Series"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"id": "A3CE42AFF0F846F4831E88F2E4C5459B",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"0 0\n",
"1 1\n",
"2 2\n",
"3 3\n",
"4 4\n",
"dtype: int64"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"arr = [0, 1, 2, 3, 4]\r\n",
"df = pd.Series(arr) # 如果不指定索引,则默认从 0 开始\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "042776A6C0144F8785E71383B58BEBAC",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"3.从字典创建 Series"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"id": "F910769AB5F64648A25447A3785E82BF",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"a 1\n",
"b 2\n",
"c 3\n",
"d 4\n",
"e 5\n",
"dtype: int64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = {'a':1,'b':2,'c':3,'d':4,'e':5}\r\n",
"df = pd.Series(d)\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "36D50B633631470282A0E6323A76D2ED",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"4.从 NumPy 数组创建 DataFrame"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"id": "43B11711239D40A6843D5CD1D3880030",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2020-11-25 19:52:19.649803</th>\n",
" <td>-2.030876</td>\n",
" <td>-1.268538</td>\n",
" <td>-0.558541</td>\n",
" <td>-0.900418</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-11-26 19:52:19.649803</th>\n",
" <td>-1.527629</td>\n",
" <td>-0.703445</td>\n",
" <td>0.101752</td>\n",
" <td>0.847650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-11-27 19:52:19.649803</th>\n",
" <td>1.778669</td>\n",
" <td>-0.726840</td>\n",
" <td>0.179889</td>\n",
" <td>0.900710</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-11-28 19:52:19.649803</th>\n",
" <td>0.632184</td>\n",
" <td>0.156482</td>\n",
" <td>0.865383</td>\n",
" <td>-1.155356</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-11-29 19:52:19.649803</th>\n",
" <td>0.092894</td>\n",
" <td>0.157272</td>\n",
" <td>-1.733493</td>\n",
" <td>-1.259203</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-11-30 19:52:19.649803</th>\n",
" <td>-1.937439</td>\n",
" <td>0.120771</td>\n",
" <td>-1.964980</td>\n",
" <td>-1.700180</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D\n",
"2020-11-25 19:52:19.649803 -2.030876 -1.268538 -0.558541 -0.900418\n",
"2020-11-26 19:52:19.649803 -1.527629 -0.703445 0.101752 0.847650\n",
"2020-11-27 19:52:19.649803 1.778669 -0.726840 0.179889 0.900710\n",
"2020-11-28 19:52:19.649803 0.632184 0.156482 0.865383 -1.155356\n",
"2020-11-29 19:52:19.649803 0.092894 0.157272 -1.733493 -1.259203\n",
"2020-11-30 19:52:19.649803 -1.937439 0.120771 -1.964980 -1.700180"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dates = pd.date_range('today',periods=6) # 定义时间序列作为 index\r\n",
"num_arr = np.random.randn(6,4) # 传入 numpy 随机数组\r\n",
"columns = ['A','B','C','D'] # 将列表作为列名\r\n",
"df1 = pd.DataFrame(num_arr, index = dates, columns = columns)\r\n",
"df1"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D7D785E5CA3C497C8C4765D984432CD8",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"5.从CSV中创建 DataFrame,分隔符为`;`,编码格式为`gbk`"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"id": "4F16DA0868BF484A85F9E690ADD9E4AD",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [],
"source": [
"# df = pd.read_csv('test.csv', encoding='gbk, sep=';')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2E270529EBA14E9583C308DFBED813F0",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"6.从字典对象`data`创建DataFrame,设置索引为`labels`"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"id": "4C7745E1545D40A4B1DF01B9FACAB322",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [],
"source": [
"import numpy as np\r\n",
"\r\n",
"data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],\r\n",
" 'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],\r\n",
" 'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],\r\n",
" 'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}\r\n",
"\r\n",
"labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"id": "E2097C5B292B484A97D18AE44387A1A2",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>0.5</td>\n",
" <td>snake</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>NaN</td>\n",
" <td>dog</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>5.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>f</th>\n",
" <td>2.0</td>\n",
" <td>cat</td>\n",
" <td>no</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>4.5</td>\n",
" <td>snake</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>NaN</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>7.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>3.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"a 2.5 cat yes 1\n",
"b 3.0 cat yes 3\n",
"c 0.5 snake no 2\n",
"d NaN dog yes 3\n",
"e 5.0 dog no 2\n",
"f 2.0 cat no 3\n",
"g 4.5 snake no 1\n",
"h NaN cat yes 1\n",
"i 7.0 dog no 2\n",
"j 3.0 dog no 1"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(data, index=labels)\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D1973CA623394A5F8C3F356AD4D5F98B",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"7.显示DataFrame的基础信息,包括行的数量;列名;每一列值的数量、类型"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"id": "704A3A9393CA4C3BBFC4382B2AC013ED",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Index: 10 entries, a to j\n",
"Data columns (total 4 columns):\n",
"age 8 non-null float64\n",
"animal 10 non-null object\n",
"priority 10 non-null object\n",
"visits 10 non-null int64\n",
"dtypes: float64(1), int64(1), object(2)\n",
"memory usage: 400.0+ bytes\n"
]
}
],
"source": [
"df.info()\r\n",
"# 方法二\r\n",
"# df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ABD97C9AF1AF4F808D803BC99DDB42A0",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"8.展示`df`的前3行"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"id": "174EEA3F312E492B8194DB974137AC9F",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>0.5</td>\n",
" <td>snake</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"a 2.5 cat yes 1\n",
"b 3.0 cat yes 3\n",
"c 0.5 snake no 2"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[:3]\r\n",
"# 方法二\r\n",
"#df.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C746F0B208A544F8869B7BEA45C0D604",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"9.取出`df`的`animal`和`age`列"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"id": "5C0327B056874AB3A61AA67A0700D026",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>animal</th>\n",
" <th>age</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>cat</td>\n",
" <td>2.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>cat</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>snake</td>\n",
" <td>0.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>dog</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>dog</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>f</th>\n",
" <td>cat</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>snake</td>\n",
" <td>4.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>cat</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>dog</td>\n",
" <td>7.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>dog</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" animal age\n",
"a cat 2.5\n",
"b cat 3.0\n",
"c snake 0.5\n",
"d dog NaN\n",
"e dog 5.0\n",
"f cat 2.0\n",
"g snake 4.5\n",
"h cat NaN\n",
"i dog 7.0\n",
"j dog 3.0"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[:, ['animal', 'age']]\r\n",
"# 方法二\r\n",
"# df[['animal', 'age']]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "A7C3AECC6B4C418683E826866F2A00BF",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"10.取出索引为`[3, 4, 8]`行的`animal`和`age`列"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"id": "28628128E7AD42A28F2235E36E81DC82",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>animal</th>\n",
" <th>age</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>dog</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>dog</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>dog</td>\n",
" <td>7.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" animal age\n",
"d dog NaN\n",
"e dog 5.0\n",
"i dog 7.0"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[df.index[[3, 4, 8]], ['animal', 'age']]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0DC73A3BAEE1471488F497ADAAECE9A4",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"11.取出`age`值大于3的行"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"id": "5F6C4EBC5CAB46868AB9B6752AFE51B1",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>5.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>4.5</td>\n",
" <td>snake</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>7.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"e 5.0 dog no 2\n",
"g 4.5 snake no 1\n",
"i 7.0 dog no 2"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df['age'] > 3]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "B58686B7272F471A8C3CA3BBABF8CFDB",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"12.取出`age`值缺失的行"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"id": "88C1B731BFB646EAA76E284E472AA440",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>NaN</td>\n",
" <td>dog</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>NaN</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"d NaN dog yes 3\n",
"h NaN cat yes 1"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df['age'].isnull()]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4F4812626E7F491CAF83EB425A452595",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"13.取出`age`在2,4间的行(不含)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"id": "C8CEA4CE37984E0783711C683257CCBA",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>3.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"a 2.5 cat yes 1\n",
"b 3.0 cat yes 3\n",
"j 3.0 dog no 1"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[(df['age']>2) & (df['age']<4)]\n",
"# 方法二\n",
"#df[df['age'].between(2, 4)]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EC4A3E47A9F94C94BC1EA9BD25CB2AC3",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"14.`f`行的`age`改为1.5"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"id": "749484D2F77E4F6A8C03820E772432DE",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [],
"source": [
"df.loc['f', 'age'] = 1.5"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4785E429ACA04385835A814AFF4F59A0",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"15.计算`visits`的总和"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"id": "37AD6C06B30947428FF7DDD1F7C39838",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"19"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['visits'].sum()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "512DCEC2028848C89E03A41E555A167E",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"16.计算每个不同种类`animal`的`age`的平均数"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"id": "31E587F50D69457ABC853375B8CBE1AF",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"animal\n",
"cat 2.333333\n",
"dog 5.000000\n",
"snake 2.500000\n",
"Name: age, dtype: float64"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('animal')['age'].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "F1C3C328E8624CE5B6B93BAFE03652D8",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"17.计算`df`中每个种类`animal`的数量"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"id": "E085A0DFC1F94C749D3234D0F86ABCBA",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"cat 4\n",
"dog 4\n",
"snake 2\n",
"Name: animal, dtype: int64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['animal'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C242DEBB812846F592335C1CEDD7DBE7",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"18.先按`age`降序排列,后按`visits`升序排列"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"id": "1743410F4F2E4AA48DA1BAD60AAEFFB6",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>7.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>5.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>4.5</td>\n",
" <td>snake</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>3.0</td>\n",
" <td>dog</td>\n",
" <td>no</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>f</th>\n",
" <td>1.5</td>\n",
" <td>cat</td>\n",
" <td>no</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>0.5</td>\n",
" <td>snake</td>\n",
" <td>no</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>NaN</td>\n",
" <td>cat</td>\n",
" <td>yes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>NaN</td>\n",
" <td>dog</td>\n",
" <td>yes</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"i 7.0 dog no 2\n",
"e 5.0 dog no 2\n",
"g 4.5 snake no 1\n",
"j 3.0 dog no 1\n",
"b 3.0 cat yes 3\n",
"a 2.5 cat yes 1\n",
"f 1.5 cat no 3\n",
"c 0.5 snake no 2\n",
"h NaN cat yes 1\n",
"d NaN dog yes 3"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sort_values(by=['age', 'visits'], ascending=[False, True])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8DAC0489BCF345D18722936760521D10",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"19.将`priority`列中的`yes, no`替换为布尔值`True, False`"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false,
"id": "7AC076FE991A4A7C86C270465AEEC2A5",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>0.5</td>\n",
" <td>snake</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>NaN</td>\n",
" <td>dog</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>5.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>f</th>\n",
" <td>1.5</td>\n",
" <td>cat</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>4.5</td>\n",
" <td>snake</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>NaN</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>7.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>3.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"a 2.5 cat True 1\n",
"b 3.0 cat True 3\n",
"c 0.5 snake False 2\n",
"d NaN dog True 3\n",
"e 5.0 dog False 2\n",
"f 1.5 cat False 3\n",
"g 4.5 snake False 1\n",
"h NaN cat True 1\n",
"i 7.0 dog False 2\n",
"j 3.0 dog False 1"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['priority'] = df['priority'].map({'yes': True, 'no': False})\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "011AD6B2DB3F4FF68B6BF78C17606F13",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"20.将`animal`列中的`snake`替换为`python`"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"id": "BB3E112D297445688FF0BBD9A7EE7E27",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>0.5</td>\n",
" <td>python</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>NaN</td>\n",
" <td>dog</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>5.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>f</th>\n",
" <td>1.5</td>\n",
" <td>cat</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>4.5</td>\n",
" <td>python</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>NaN</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>7.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>3.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"a 2.5 cat True 1\n",
"b 3.0 cat True 3\n",
"c 0.5 python False 2\n",
"d NaN dog True 3\n",
"e 5.0 dog False 2\n",
"f 1.5 cat False 3\n",
"g 4.5 python False 1\n",
"h NaN cat True 1\n",
"i 7.0 dog False 2\n",
"j 3.0 dog False 1"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['animal'] = df['animal'].replace('snake', 'python')\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3BA3F97990E346A5836836864EB4FFB8",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"21.对每种`animal`的每种不同数量`visits`,计算平均`age`,即,返回一个表格,行是`aniaml`种类,列是`visits`数量,表格值是行动物种类列访客数量的平均年龄"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"id": "AF5A8AAAB4884450B89A9544B40DD4ED",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"age float64\n",
"animal object\n",
"priority bool\n",
"visits int64\n",
"dtype: object"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"id": "83C7501AF44F47AA8E5258652FDF9988",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [],
"source": [
"df.age=df.age.astype(float)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false,
"id": "E784D19B88B3426498F0B41FCC4290C6",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>visits</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" <tr>\n",
" <th>animal</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>cat</th>\n",
" <td>2.5</td>\n",
" <td>NaN</td>\n",
" <td>2.25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>dog</th>\n",
" <td>3.0</td>\n",
" <td>6.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>python</th>\n",
" <td>4.5</td>\n",
" <td>0.5</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"visits 1 2 3\n",
"animal \n",
"cat 2.5 NaN 2.25\n",
"dog 3.0 6.0 NaN\n",
"python 4.5 0.5 NaN"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_table(index='animal', columns='visits', values='age', aggfunc='mean')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "54EC83F0A5AC41D88DEB3D986A9F608C",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"22.在`df`中插入新行`k`,然后删除该行"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"id": "8CCB1591219B4CA983EEF993924C726C",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>animal</th>\n",
" <th>priority</th>\n",
" <th>visits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>a</th>\n",
" <td>2.5</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>b</th>\n",
" <td>3.0</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>c</th>\n",
" <td>0.5</td>\n",
" <td>python</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d</th>\n",
" <td>NaN</td>\n",
" <td>dog</td>\n",
" <td>True</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e</th>\n",
" <td>5.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>f</th>\n",
" <td>1.5</td>\n",
" <td>cat</td>\n",
" <td>False</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>g</th>\n",
" <td>4.5</td>\n",
" <td>python</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>h</th>\n",
" <td>NaN</td>\n",
" <td>cat</td>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i</th>\n",
" <td>7.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>j</th>\n",
" <td>3.0</td>\n",
" <td>dog</td>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age animal priority visits\n",
"a 2.5 cat True 1\n",
"b 3.0 cat True 3\n",
"c 0.5 python False 2\n",
"d NaN dog True 3\n",
"e 5.0 dog False 2\n",
"f 1.5 cat False 3\n",
"g 4.5 python False 1\n",
"h NaN cat True 1\n",
"i 7.0 dog False 2\n",
"j 3.0 dog False 1"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#插入\r\n",
"df.loc['k'] = [5.5, 'dog', 'no', 2]\r\n",
"# 删除\r\n",
"df = df.drop('k')\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "E4BF6769090045D9BBAA73B83A6D0304",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## 进阶操作"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EC5E11D6D5E745CA888128DC64E933B9",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"23.有一列整数列`A`的DatraFrame,删除数值重复的行"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"id": "E64946439A524AF8817063EF7C3B9AC3",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" A\n",
"0 1\n",
"1 2\n",
"2 2\n",
"3 3\n",
"4 4\n",
"5 5\n",
"6 5\n",
"7 5\n",
"8 6\n",
"9 7\n",
"10 7\n",
" A\n",
"0 1\n",
"1 2\n",
"3 3\n",
"4 4\n",
"5 5\n",
"8 6\n",
"9 7\n"
]
}
],
"source": [
"df = pd.DataFrame({'A': [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7]})\n",
"print(df)\n",
"df1 = df.loc[df['A'].shift() != df['A']]\n",
"# 方法二\n",
"# df1 = df.drop_duplicates(subset='A')\n",
"print(df1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "52EF04D119B045D29071C0635CBF854D",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"24.一个全数值DatraFrame,每个数字减去该行的平均数"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"id": "50FEE2500BC64CBA8EB44425860DAA9C",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0 1 2\n",
"0 0.414453 0.332157 0.856186\n",
"1 0.163896 0.089443 0.593890\n",
"2 0.526212 0.781033 0.299327\n",
"3 0.405021 0.890150 0.575210\n",
"4 0.516062 0.485737 0.584763\n",
" 0 1 2\n",
"0 -0.119812 -0.202108 0.321921\n",
"1 -0.118514 -0.192967 0.311480\n",
"2 -0.009312 0.245509 -0.236198\n",
"3 -0.218440 0.266689 -0.048250\n",
"4 -0.012792 -0.043117 0.055909\n"
]
}
],
"source": [
"df = pd.DataFrame(np.random.random(size=(5, 3)))\n",
"print(df)\n",
"df1 = df.sub(df.mean(axis=1), axis=0)\n",
"print(df1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "935456754362412684F8A7DB2BB264DE",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"25.一个有5列的DataFrame,求哪一列的和最小"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"id": "81B9F18E6DD94167B6D304E54DBBE7BD",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" a b c d e\n",
"0 0.497311 0.702727 0.317818 0.246678 0.761391\n",
"1 0.757598 0.135243 0.023186 0.181558 0.360602\n",
"2 0.002264 0.116232 0.221348 0.717638 0.289913\n",
"3 0.048115 0.909258 0.013615 0.080099 0.722705\n",
"4 0.138972 0.687775 0.540898 0.306161 0.444953\n"
]
},
{
"data": {
"text/plain": [
"'c'"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(np.random.random(size=(5, 5)), columns=list('abcde'))\n",
"print(df)\n",
"df.sum().idxmin()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7418298827EF4DE18D88D79ABEE3389C",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"26.给定DataFrame,求`A`列每个值的前3大的`B`的和"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"id": "E3316FCA37B04ECF94808EACA6702994",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" A B\n",
"0 a 12\n",
"1 a 345\n",
"2 a 3\n",
"3 b 1\n",
"4 b 45\n",
"5 c 14\n",
"6 a 4\n",
"7 a 52\n",
"8 b 54\n",
"9 c 23\n",
"10 c 235\n",
"11 c 21\n",
"12 b 57\n",
"13 b 3\n",
"14 c 87\n",
"A\n",
"a 409\n",
"b 156\n",
"c 345\n",
"Name: B, dtype: int64\n"
]
}
],
"source": [
"df = pd.DataFrame({'A': list('aaabbcaabcccbbc'), \r\n",
" 'B': [12,345,3,1,45,14,4,52,54,23,235,21,57,3,87]})\r\n",
"print(df)\r\n",
"df1 = df.groupby('A')['B'].nlargest(3).sum(level=0)\r\n",
"print(df1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "42417D37787F4199A3A7B4E35F691433",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"27.给定DataFrame,有列`A, B`,`A`的值在1-100(含),对`A`列每10步长,求对应的`B`的和"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false,
"id": "226877047B334FC7A3F075152E048FF6",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" A B\n",
"0 1 1\n",
"1 2 2\n",
"2 11 11\n",
"3 11 11\n",
"4 33 33\n",
"5 34 34\n",
"6 35 35\n",
"7 40 40\n",
"8 79 79\n",
"9 99 99\n",
"A\n",
"(0, 10] 3\n",
"(10, 20] 22\n",
"(20, 30] 0\n",
"(30, 40] 142\n",
"(40, 50] 0\n",
"(50, 60] 0\n",
"(60, 70] 0\n",
"(70, 80] 79\n",
"(80, 90] 0\n",
"(90, 100] 99\n",
"Name: B, dtype: int64\n"
]
}
],
"source": [
"df = pd.DataFrame({'A': [1,2,11,11,33,34,35,40,79,99], \r\n",
" 'B': [1,2,11,11,33,34,35,40,79,99]})\r\n",
"print(df)\r\n",
"df1 = df.groupby(pd.cut(df['A'], np.arange(0, 101, 10)))['B'].sum()\r\n",
"print(df1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4A41563F4E83421E99DC691CDCBF1B5F",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"28.给定DataFrame,计算每个元素至左边最近的`0`(或者至开头)的距离,生成新列`y`"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false,
"id": "83E7FDD067C546ED8FC7260C12CB49D4",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" X Y\n",
"0 7 1\n",
"1 2 2\n",
"2 0 0\n",
"3 3 1\n",
"4 4 2\n",
"5 2 3\n",
"6 5 4\n",
"7 0 0\n",
"8 3 1\n",
"9 4 2\n"
]
}
],
"source": [
"df = pd.DataFrame({'X': [7, 2, 0, 3, 4, 2, 5, 0, 3, 4]})\n",
"\n",
"izero = np.r_[-1, (df['X'] == 0).to_numpy().nonzero()[0]] # 标记0的位置\n",
"idx = np.arange(len(df))\n",
"df['Y'] = idx - izero[np.searchsorted(izero - 1, idx) - 1]\n",
"print(df)\n",
"\n",
"# 方法二\n",
"# x = (df['X'] != 0).cumsum()\n",
"# y = x != x.shift()\n",
"# df['Y'] = y.groupby((y != y.shift()).cumsum()).cumsum()\n",
"\n",
"# 方法三\n",
"# df['Y'] = df.groupby((df['X'] == 0).cumsum()).cumcount()\n",
"#first_zero_idx = (df['X'] == 0).idxmax()\n",
"# df['Y'].iloc[0:first_zero_idx] += 1"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C6EFAC00D81F4F629784CC2C59AAC6AB",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"29.一个全数值的DataFrame,返回最大3值的坐标"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"id": "5C3C6B1686744DAD89695A3071E6F68B",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0 1 2\n",
"0 0.357183 0.569268 0.115802\n",
"1 0.605917 0.881550 0.593334\n",
"2 0.830468 0.072343 0.661204\n",
"3 0.811008 0.985117 0.550789\n",
"4 0.091020 0.296938 0.421596\n"
]
},
{
"data": {
"text/plain": [
"[(0, 2), (1, 1), (1, 3)]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(np.random.random(size=(5, 3)))\n",
"print(df)\n",
"df.unstack().sort_values()[-3:].index.tolist()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "175D476BB4A24A74A99286D21B6BA1A2",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"30.给定DataFrame,将负值代替为同组的平均值"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"id": "553E4F00BFB44D968D1D87C4479B90D1",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" grps vals\n",
"0 a -12\n",
"1 a 345\n",
"2 a 3\n",
"3 b 1\n",
"4 b 45\n",
"5 c 14\n",
"6 a 4\n",
"7 a -52\n",
"8 b 54\n",
"9 c 23\n",
"10 c -235\n",
"11 c 21\n",
"12 b 57\n",
"13 b 3\n",
"14 c 87\n",
" grps vals\n",
"0 a 117.333333\n",
"1 a 345.000000\n",
"2 a 3.000000\n",
"3 b 1.000000\n",
"4 b 45.000000\n",
"5 c 14.000000\n",
"6 a 4.000000\n",
"7 a 117.333333\n",
"8 b 54.000000\n",
"9 c 23.000000\n",
"10 c 36.250000\n",
"11 c 21.000000\n",
"12 b 57.000000\n",
"13 b 3.000000\n",
"14 c 87.000000\n"
]
}
],
"source": [
"df = pd.DataFrame({'grps': list('aaabbcaabcccbbc'), \r\n",
" 'vals': [-12,345,3,1,45,14,4,-52,54,23,-235,21,57,3,87]})\r\n",
"print(df)\r\n",
"\r\n",
"def replace(group):\r\n",
" mask = group<0\r\n",
" group[mask] = group[~mask].mean()\r\n",
" return group\r\n",
"\r\n",
"df['vals'] = df.groupby(['grps'])['vals'].transform(replace)\r\n",
"print(df)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "531D55E9C6104DD68D133D310A9C6ADF",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"31.计算3位滑动窗口的平均值,忽略NAN"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false,
"id": "FB5B855534524B3185737D4B9840F377",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" group value\n",
"0 a 1.0\n",
"1 a 2.0\n",
"2 b 3.0\n",
"3 b NaN\n",
"4 a 2.0\n",
"5 b 3.0\n",
"6 b NaN\n",
"7 b 1.0\n",
"8 a 7.0\n",
"9 b 3.0\n",
"10 a NaN\n",
"11 b 8.0\n"
]
},
{
"data": {
"text/plain": [
"0 1.000000\n",
"1 1.500000\n",
"2 3.000000\n",
"3 3.000000\n",
"4 1.666667\n",
"5 3.000000\n",
"6 3.000000\n",
"7 2.000000\n",
"8 3.666667\n",
"9 2.000000\n",
"10 4.500000\n",
"11 4.000000\n",
"Name: value, dtype: float64"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame({'group': list('aabbabbbabab'),\r\n",
" 'value': [1, 2, 3, np.nan, 2, 3, np.nan, 1, 7, 3, np.nan, 8]})\r\n",
"print(df)\r\n",
"\r\n",
"g1 = df.groupby(['group'])['value']\r\n",
"g2 = df.fillna(0).groupby(['group'])['value'] \r\n",
"\r\n",
"s = g2.rolling(3, min_periods=1).sum() / g1.rolling(3, min_periods=1).count()\r\n",
"\r\n",
"s.reset_index(level=0, drop=True).sort_index() "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0F3BEA0769BA46EE9663284836B66CBC",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## Series 和 Datetime索引"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C2D533ADDA924DCA8D6F0738301A925C",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"32.创建Series `s`,将2015所有工作日作为随机值的索引"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false,
"id": "D0C59B606E07405280B76B7BAA0D4DDA",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"2015-01-01 0.896401\n",
"2015-01-02 0.789480\n",
"2015-01-05 0.271381\n",
"2015-01-06 0.740503\n",
"2015-01-07 0.241424\n",
"2015-01-08 0.644122\n",
"2015-01-09 0.599708\n",
"2015-01-12 0.714903\n",
"2015-01-13 0.285152\n",
"2015-01-14 0.574001\n",
"Freq: B, dtype: float64"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dti = pd.date_range(start='2015-01-01', end='2015-12-31', freq='B') \r\n",
"s = pd.Series(np.random.rand(len(dti)), index=dti)\r\n",
"\r\n",
"s.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5EE211F6B1384974BB98801E9D7F4FE7",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"33.所有礼拜三的值求和"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false,
"id": "2608EBB1A445402E823F8DB819B99022",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"27.08213095254659"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[s.index.weekday == 2].sum() "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "358A1965800B4B4D8A018A4C70B70FB5",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"34.求每个自然月的平均数"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false,
"id": "DE356545760A481E8E164FF508569B1F",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"2015-01-31 0.474092\n",
"2015-02-28 0.421380\n",
"2015-03-31 0.676973\n",
"2015-04-30 0.427968\n",
"2015-05-31 0.638426\n",
"2015-06-30 0.561239\n",
"2015-07-31 0.536794\n",
"2015-08-31 0.500563\n",
"2015-09-30 0.548050\n",
"2015-10-31 0.592157\n",
"2015-11-30 0.467826\n",
"2015-12-31 0.548842\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.resample('M').mean()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5FDC751CEE534FDE9854536036EB49F5",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"35.每连续4个月为一组,求最大值所在的日期"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false,
"id": "93F635653DD14D29B7166D896B7F02E9",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"2015-01-31 2015-01-01\n",
"2015-05-31 2015-03-11\n",
"2015-09-30 2015-07-03\n",
"2016-01-31 2015-11-23\n",
"Freq: 4M, dtype: datetime64[ns]"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.groupby(pd.Grouper(freq='4M')).idxmax()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "521B75EA73834A02AD0C21929A503AB3",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"36.创建2015-2016每月第三个星期四的序列"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false,
"id": "06CC1162D5BC4D348F579609DDA184DC",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"DatetimeIndex(['2015-01-15', '2015-02-19', '2015-03-19', '2015-04-16',\n",
" '2015-05-21', '2015-06-18', '2015-07-16', '2015-08-20',\n",
" '2015-09-17', '2015-10-15', '2015-11-19', '2015-12-17',\n",
" '2016-01-21', '2016-02-18', '2016-03-17', '2016-04-21',\n",
" '2016-05-19', '2016-06-16', '2016-07-21', '2016-08-18',\n",
" '2016-09-15', '2016-10-20', '2016-11-17', '2016-12-15'],\n",
" dtype='datetime64[ns]', freq='WOM-3THU')"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.date_range('2015-01-01', '2016-12-31', freq='WOM-3THU')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0A6698CC0BE34C849855C4A507E38C17",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## 数据清洗"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false,
"id": "781F1B8BEA8F43D59E5E6F31923398F9",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Airline</th>\n",
" <th>FlightNumber</th>\n",
" <th>From_To</th>\n",
" <th>RecentDelays</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KLM(!)</td>\n",
" <td>10045.0</td>\n",
" <td>LoNDon_paris</td>\n",
" <td>[23, 47]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td><Air France> (12)</td>\n",
" <td>NaN</td>\n",
" <td>MAdrid_miLAN</td>\n",
" <td>[]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(British Airways. )</td>\n",
" <td>10065.0</td>\n",
" <td>londON_StockhOlm</td>\n",
" <td>[24, 43, 87]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>12. Air France</td>\n",
" <td>NaN</td>\n",
" <td>Budapest_PaRis</td>\n",
" <td>[13]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>\"Swiss Air\"</td>\n",
" <td>10085.0</td>\n",
" <td>Brussels_londOn</td>\n",
" <td>[67, 32]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Airline FlightNumber From_To RecentDelays\n",
"0 KLM(!) 10045.0 LoNDon_paris [23, 47]\n",
"1 <Air France> (12) NaN MAdrid_miLAN []\n",
"2 (British Airways. ) 10065.0 londON_StockhOlm [24, 43, 87]\n",
"3 12. Air France NaN Budapest_PaRis [13]\n",
"4 \"Swiss Air\" 10085.0 Brussels_londOn [67, 32]"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame({'From_To': ['LoNDon_paris', 'MAdrid_miLAN', 'londON_StockhOlm', \r\n",
" 'Budapest_PaRis', 'Brussels_londOn'],\r\n",
" 'FlightNumber': [10045, np.nan, 10065, np.nan, 10085],\r\n",
" 'RecentDelays': [[23, 47], [], [24, 43, 87], [13], [67, 32]],\r\n",
" 'Airline': ['KLM(!)', '<Air France> (12)', '(British Airways. )', \r\n",
" '12. Air France', '\"Swiss Air\"']})\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "A5514B83AF294CEA9A91F4EBD70829CF",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"37.`FlightNumber`列中有些值缺失了,他们本来应该是每一行增加10,填充缺失的数值,并且令数据类型为整数"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false,
"id": "C966348861274DED830F3D0A78E72273",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Airline</th>\n",
" <th>FlightNumber</th>\n",
" <th>From_To</th>\n",
" <th>RecentDelays</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KLM(!)</td>\n",
" <td>10045</td>\n",
" <td>LoNDon_paris</td>\n",
" <td>[23, 47]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td><Air France> (12)</td>\n",
" <td>10055</td>\n",
" <td>MAdrid_miLAN</td>\n",
" <td>[]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(British Airways. )</td>\n",
" <td>10065</td>\n",
" <td>londON_StockhOlm</td>\n",
" <td>[24, 43, 87]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>12. Air France</td>\n",
" <td>10075</td>\n",
" <td>Budapest_PaRis</td>\n",
" <td>[13]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>\"Swiss Air\"</td>\n",
" <td>10085</td>\n",
" <td>Brussels_londOn</td>\n",
" <td>[67, 32]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Airline FlightNumber From_To RecentDelays\n",
"0 KLM(!) 10045 LoNDon_paris [23, 47]\n",
"1 <Air France> (12) 10055 MAdrid_miLAN []\n",
"2 (British Airways. ) 10065 londON_StockhOlm [24, 43, 87]\n",
"3 12. Air France 10075 Budapest_PaRis [13]\n",
"4 \"Swiss Air\" 10085 Brussels_londOn [67, 32]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['FlightNumber'] = df['FlightNumber'].interpolate().astype(int)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DF2998C5B9FB4C838CC6B9E8C3D69739",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"38.将`From_To`列从`_`分开,分成`From, To`两列,并删除原始列"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false,
"id": "9C6E47AB6E4746ABAFF4A5AE4BB15C5B",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Airline</th>\n",
" <th>FlightNumber</th>\n",
" <th>RecentDelays</th>\n",
" <th>From</th>\n",
" <th>To</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KLM(!)</td>\n",
" <td>10045</td>\n",
" <td>[23, 47]</td>\n",
" <td>LoNDon</td>\n",
" <td>paris</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td><Air France> (12)</td>\n",
" <td>10055</td>\n",
" <td>[]</td>\n",
" <td>MAdrid</td>\n",
" <td>miLAN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(British Airways. )</td>\n",
" <td>10065</td>\n",
" <td>[24, 43, 87]</td>\n",
" <td>londON</td>\n",
" <td>StockhOlm</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>12. Air France</td>\n",
" <td>10075</td>\n",
" <td>[13]</td>\n",
" <td>Budapest</td>\n",
" <td>PaRis</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>\"Swiss Air\"</td>\n",
" <td>10085</td>\n",
" <td>[67, 32]</td>\n",
" <td>Brussels</td>\n",
" <td>londOn</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Airline FlightNumber RecentDelays From To\n",
"0 KLM(!) 10045 [23, 47] LoNDon paris\n",
"1 <Air France> (12) 10055 [] MAdrid miLAN\n",
"2 (British Airways. ) 10065 [24, 43, 87] londON StockhOlm\n",
"3 12. Air France 10075 [13] Budapest PaRis\n",
"4 \"Swiss Air\" 10085 [67, 32] Brussels londOn"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temp = df.From_To.str.split('_', expand=True)\r\n",
"temp.columns = ['From', 'To']\r\n",
"df = df.join(temp)\r\n",
"df = df.drop('From_To', axis=1)\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6158CB82BEFF471186E695AFCF141578",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"39.将`From, To`大小写统一"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false,
"id": "723B7E56837A4D1AB35FB629F4EA27F7",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Airline</th>\n",
" <th>FlightNumber</th>\n",
" <th>RecentDelays</th>\n",
" <th>From</th>\n",
" <th>To</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KLM(!)</td>\n",
" <td>10045</td>\n",
" <td>[23, 47]</td>\n",
" <td>London</td>\n",
" <td>Paris</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td><Air France> (12)</td>\n",
" <td>10055</td>\n",
" <td>[]</td>\n",
" <td>Madrid</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(British Airways. )</td>\n",
" <td>10065</td>\n",
" <td>[24, 43, 87]</td>\n",
" <td>London</td>\n",
" <td>Stockholm</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>12. Air France</td>\n",
" <td>10075</td>\n",
" <td>[13]</td>\n",
" <td>Budapest</td>\n",
" <td>Paris</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>\"Swiss Air\"</td>\n",
" <td>10085</td>\n",
" <td>[67, 32]</td>\n",
" <td>Brussels</td>\n",
" <td>London</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Airline FlightNumber RecentDelays From To\n",
"0 KLM(!) 10045 [23, 47] London Paris\n",
"1 <Air France> (12) 10055 [] Madrid Milan\n",
"2 (British Airways. ) 10065 [24, 43, 87] London Stockholm\n",
"3 12. Air France 10075 [13] Budapest Paris\n",
"4 \"Swiss Air\" 10085 [67, 32] Brussels London"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['From'] = df['From'].str.capitalize()\r\n",
"df['To'] = df['To'].str.capitalize()\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4E3A3DA70FC34F01ACA10F535844B079",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"40.`Airline`列,有一些多余的标点符号,需要提取出正确的航司名称。举例:`'(British Airways. )'` 应该改为 `'British Airways'`."
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false,
"id": "9F9F0D09D80F4B8E837F4ABB09DBC76C",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Airline</th>\n",
" <th>FlightNumber</th>\n",
" <th>RecentDelays</th>\n",
" <th>From</th>\n",
" <th>To</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KLM</td>\n",
" <td>10045</td>\n",
" <td>[23, 47]</td>\n",
" <td>London</td>\n",
" <td>Paris</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Air France</td>\n",
" <td>10055</td>\n",
" <td>[]</td>\n",
" <td>Madrid</td>\n",
" <td>Milan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>British Airways</td>\n",
" <td>10065</td>\n",
" <td>[24, 43, 87]</td>\n",
" <td>London</td>\n",
" <td>Stockholm</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Air France</td>\n",
" <td>10075</td>\n",
" <td>[13]</td>\n",
" <td>Budapest</td>\n",
" <td>Paris</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Swiss Air</td>\n",
" <td>10085</td>\n",
" <td>[67, 32]</td>\n",
" <td>Brussels</td>\n",
" <td>London</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Airline FlightNumber RecentDelays From To\n",
"0 KLM 10045 [23, 47] London Paris\n",
"1 Air France 10055 [] Madrid Milan\n",
"2 British Airways 10065 [24, 43, 87] London Stockholm\n",
"3 Air France 10075 [13] Budapest Paris\n",
"4 Swiss Air 10085 [67, 32] Brussels London"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Airline'] = df['Airline'].str.extract('([a-zA-Z\\s]+)', expand=False).str.strip()\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2433A20C6E6D47E381B6EB1B738F8577",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"41.`Airline`列,数据被以列表的形式录入,但是我们希望每个数字被录入成单独一列,`delay_1, delay_2, ...`没有的用NAN替代。"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false,
"id": "F779D702D1BD4C4082DBDF2D31BA7D57",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Airline</th>\n",
" <th>FlightNumber</th>\n",
" <th>From</th>\n",
" <th>To</th>\n",
" <th>delay_1</th>\n",
" <th>delay_2</th>\n",
" <th>delay_3</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KLM</td>\n",
" <td>10045</td>\n",
" <td>London</td>\n",
" <td>Paris</td>\n",
" <td>23.0</td>\n",
" <td>47.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Air France</td>\n",
" <td>10055</td>\n",
" <td>Madrid</td>\n",
" <td>Milan</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>British Airways</td>\n",
" <td>10065</td>\n",
" <td>London</td>\n",
" <td>Stockholm</td>\n",
" <td>24.0</td>\n",
" <td>43.0</td>\n",
" <td>87.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Air France</td>\n",
" <td>10075</td>\n",
" <td>Budapest</td>\n",
" <td>Paris</td>\n",
" <td>13.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Swiss Air</td>\n",
" <td>10085</td>\n",
" <td>Brussels</td>\n",
" <td>London</td>\n",
" <td>67.0</td>\n",
" <td>32.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Airline FlightNumber From To delay_1 delay_2 \\\n",
"0 KLM 10045 London Paris 23.0 47.0 \n",
"1 Air France 10055 Madrid Milan NaN NaN \n",
"2 British Airways 10065 London Stockholm 24.0 43.0 \n",
"3 Air France 10075 Budapest Paris 13.0 NaN \n",
"4 Swiss Air 10085 Brussels London 67.0 32.0 \n",
"\n",
" delay_3 \n",
"0 NaN \n",
"1 NaN \n",
"2 87.0 \n",
"3 NaN \n",
"4 NaN "
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"delays = df['RecentDelays'].apply(pd.Series)\r\n",
"delays.columns = ['delay_{}'.format(n) for n in range(1, len(delays.columns)+1)]\r\n",
"df = df.drop('RecentDelays', axis=1).join(delays)\r\n",
"\r\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EBEC4771C87D4E94837A07FBC3D2FB86",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## 层次化索引"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "365219BB0A2142F789CD512EC8DD8DA0",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"42.用 `letters = ['A', 'B', 'C']` 和 `numbers = list(range(10))`的组合作为系列随机值的层次化索引"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false,
"id": "3941AB87138449D4839163AAA610B79B",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"A 0 0.950249\n",
" 1 0.726566\n",
" 2 0.495760\n",
" 3 0.905605\n",
"B 0 0.004121\n",
" 1 0.626741\n",
" 2 0.121265\n",
" 3 0.241187\n",
"C 0 0.595867\n",
" 1 0.840930\n",
" 2 0.102324\n",
" 3 0.354690\n",
"dtype: float64"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"letters = ['A', 'B', 'C']\r\n",
"numbers = list(range(4))\r\n",
"\r\n",
"mi = pd.MultiIndex.from_product([letters, numbers])\r\n",
"s = pd.Series(np.random.rand(12), index=mi)\r\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1C32A5A6E21B46438E6C74362326396E",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"43.检查`s`是否是字典顺序排序的"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false,
"id": "A5E45FD54216448494C431702C75F220",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.index.is_lexsorted()\n",
"# 方法二\n",
"# s.index.lexsort_depth == s.index.nlevels"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "65DB246948F54D33AD898EE03C6F4194",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"44.选择二级索引为`1, 3`的行"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false,
"id": "DA5943E1C5774D999FA32D3DDA7C7BAD",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"A 1 0.726566\n",
" 3 0.905605\n",
"B 1 0.626741\n",
" 3 0.241187\n",
"C 1 0.840930\n",
" 3 0.354690\n",
"dtype: float64"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.loc[:, [1, 3]]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "E3B271B10E514224A23D471B5B7C5F61",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"45.对`s`进行切片操作,取一级索引从头至`B`,二级索引从`2`开始到最后"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false,
"id": "6B626EA066FA41098A837850832D0F66",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"A 2 0.495760\n",
" 3 0.905605\n",
"B 2 0.121265\n",
" 3 0.241187\n",
"dtype: float64"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.loc[pd.IndexSlice[:'B', 2:]]\r\n",
"# 方法二\r\n",
"# s.loc[slice(None, 'B'), slice(2, None)]"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "63258D8A886649D899C95A837D72349C",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"46.计算每个一级索引的和(A, B, C每一个的和)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false,
"id": "4942734127674CE39FBFE078DA51DF74",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"A 3.078180\n",
"B 0.993314\n",
"C 1.893810\n",
"dtype: float64"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.sum(level=0)\n",
"#方法二\n",
"#s.unstack().sum(axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3EAA26B0B98D4A078B457986919EC070",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"47.交换索引等级,新的Series是字典顺序吗?不是的话请排序"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false,
"id": "BA78AE9AB69240AC8B3C9E143C41A5DC",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 A 0.950249\n",
"1 A 0.726566\n",
"2 A 0.495760\n",
"3 A 0.905605\n",
"0 B 0.004121\n",
"1 B 0.626741\n",
"2 B 0.121265\n",
"3 B 0.241187\n",
"0 C 0.595867\n",
"1 C 0.840930\n",
"2 C 0.102324\n",
"3 C 0.354690\n",
"dtype: float64\n",
"False\n",
"0 A 0.950249\n",
" B 0.004121\n",
" C 0.595867\n",
"1 A 0.726566\n",
" B 0.626741\n",
" C 0.840930\n",
"2 A 0.495760\n",
" B 0.121265\n",
" C 0.102324\n",
"3 A 0.905605\n",
" B 0.241187\n",
" C 0.354690\n",
"dtype: float64\n"
]
}
],
"source": [
"new_s = s.swaplevel(0, 1)\n",
"print(new_s)\n",
"print(new_s.index.is_lexsorted())\n",
"new_s = new_s.sort_index()\n",
"print(new_s)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5947FCF045F643D58DCF2330FEFFECE2",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## 可视化"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false,
"id": "E257843110B542A08DD732237CEB62EF",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"df = pd.DataFrame({\"xs\":[1,5,2,8,1], \"ys\":[4,2,1,9,6]})\n",
"plt.style.use('ggplot')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ABA878EB9825499883EAB997A8B0F10A",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"48.画出`df`的散点图"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false,
"id": "EE673BF23AAA4CAE8506223454716FAA",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f3d38ea12b0>"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df.plot.scatter(\"xs\", \"ys\", color = \"black\", marker = \"x\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3571FCD0673346158D19B701FF540CD4",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"49.可视化指定4维DataFrame"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false,
"id": "763CECD47B954A6F804898FBAFFE9BC2",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f3d36b774a8>"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df = pd.DataFrame({\"productivity\":[5,2,3,1,4,5,6,7,8,3,4,8,9],\r\n",
" \"hours_in\" :[1,9,6,5,3,9,2,9,1,7,4,2,2],\r\n",
" \"happiness\" :[2,1,3,2,3,1,2,3,1,2,2,1,3],\r\n",
" \"caffienated\" :[0,0,1,1,0,0,0,0,1,1,0,1,0]})\r\n",
"\r\n",
"df.plot.scatter(\"hours_in\", \"productivity\", s = df.happiness * 100, c = df.caffienated)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3A18A9AE34D8418A863948333844BB7D",
"jupyter": {},
"mdEditEnable": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"50.在同一个图中可视化2组数据,共用X轴,但y轴不同"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false,
"id": "9089C025DDC44A74836D5A1ADB6AD5EC",
"jupyter": {},
"scrolled": false,
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df = pd.DataFrame({\"revenue\":[57,68,63,71,72,90,80,62,59,51,47,52],\r\n",
" \"advertising\":[2.1,1.9,2.7,3.0,3.6,3.2,2.7,2.4,1.8,1.6,1.3,1.9],\r\n",
" \"month\":range(12)})\r\n",
"\r\n",
"ax = df.plot.bar(\"month\", \"revenue\", color = \"green\")\r\n",
"df.plot.line(\"month\", \"advertising\", secondary_y = True, ax = ax)\r\n",
"ax.set_xlim((-1,12));"
]
}
],
"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
}