{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "72db5768",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: pandas in c:\\programdata\\anaconda3\\lib\\site-packages (1.4.2)\n",
      "Requirement already satisfied: matplotlib in c:\\programdata\\anaconda3\\lib\\site-packages (3.5.1)\n",
      "Requirement already satisfied: python-dateutil>=2.8.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (2.8.2)\n",
      "Requirement already satisfied: numpy>=1.18.5 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (1.21.5)\n",
      "Requirement already satisfied: pytz>=2020.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (2021.3)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib) (4.25.0)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib) (21.3)\n",
      "Requirement already satisfied: cycler>=0.10 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib) (0.11.0)\n",
      "Requirement already satisfied: pillow>=6.2.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib) (9.0.1)\n",
      "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib) (1.3.2)\n",
      "Requirement already satisfied: pyparsing>=2.2.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib) (3.0.4)\n",
      "Requirement already satisfied: six>=1.5 in c:\\programdata\\anaconda3\\lib\\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)\n"
     ]
    }
   ],
   "source": [
    "## 第一步安装缺失的组件\n",
    "!pip install pandas  matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "35486f6c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "1  90.0  75   NaN\n",
      "2   NaN  88   NaN\n",
      "3  70.0  92  90.0\n",
      "      语文     数学     英语\n",
      "0  False  False  False\n",
      "1  False  False   True\n",
      "2   True  False   True\n",
      "3  False  False  False\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "语文    25.0\n",
       "数学     0.0\n",
       "英语    50.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 缺失值处理\n",
    "#第一步：打地基\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "df = pd.DataFrame(\n",
    "{'语文':[80,90,None,70],\n",
    " '数学':[60,75,88,92],\n",
    " '英语':[55,np.nan,np.nan,90]})\n",
    "print(df)\n",
    "\n",
    "#第二步：查看缺失值\n",
    "print(df.isnull())\n",
    "\n",
    "#第三步：计算缺失值占比\n",
    "## 方法1：手算：3/12*100  %= 25%\n",
    "## 方法2：代码：\n",
    "df.isnull().sum() / len(df) * 100\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "0543f9fd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "3  70.0  92  90.0\n"
     ]
    }
   ],
   "source": [
    "#缺失值处理1\n",
    "print(df.dropna())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ec9b6355",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "1  90.0  75   NaN\n",
      "2   NaN  88   NaN\n",
      "3  70.0  92  90.0\n",
      "      语文  数学     英语\n",
      "0   80.0  60   55.0\n",
      "1   90.0  75  656.0\n",
      "2  656.0  88  656.0\n",
      "3   70.0  92   90.0\n"
     ]
    }
   ],
   "source": [
    "#缺失值处理2：补上\n",
    "## 补上方法1：固定值\n",
    "print(df)\n",
    "print(df.fillna(656))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d0b73852",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "1  90.0  75   NaN\n",
      "2   NaN  88   NaN\n",
      "3  70.0  92  90.0\n",
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "1  90.0  75  72.5\n",
      "2  80.0  88  72.5\n",
      "3  70.0  92  90.0\n",
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "1  90.0  75   NaN\n",
      "2   NaN  88   NaN\n",
      "3  70.0  92  90.0\n",
      "     语文  数学    英语\n",
      "0  80.0  60  55.0\n",
      "1  90.0  75  90.0\n",
      "2  90.0  88  90.0\n",
      "3  70.0  92  90.0\n"
     ]
    }
   ],
   "source": [
    "#缺失值处理2：补上\n",
    "## 补上方法2：平均值\n",
    "print(df)\n",
    "print(df.fillna(df.mean()))\n",
    "\n",
    "## 补上方法3：最大值填充\n",
    "print(df)\n",
    "print(df.fillna(df.max()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "d5fcbb6b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   姓名  年龄  班级\n",
      "0  张三  20  1班\n",
      "1  李四  21  1班\n",
      "2  王五  22  2班\n",
      "3  赵六  23  2班\n",
      "4  赵六  23  2班\n",
      "0    False\n",
      "1    False\n",
      "2    False\n",
      "3    False\n",
      "4     True\n",
      "dtype: bool\n"
     ]
    }
   ],
   "source": [
    "## 重复值\n",
    "##第一步：打地基\n",
    "import pandas as pd\n",
    "# 学生信息表\n",
    "df = pd.DataFrame({\n",
    "'姓名':['张三', '李四', '王五', '赵六', '赵六'],\n",
    "'年龄':[20,21,22,23,23],\n",
    "'班级':['1班','1班','2班','2班','2班']\n",
    "})\n",
    "print(df)\n",
    "## 标记重复行\n",
    "print(df.duplicated())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "060db984",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   姓名  年龄  班级\n",
      "0  张三  20  1班\n",
      "1  李四  21  1班\n",
      "2  王五  22  2班\n",
      "3  赵六  23  2班\n"
     ]
    }
   ],
   "source": [
    "## 删除重复行\n",
    "print(df.drop_duplicates())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "a3a1edd7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Series([], Name: 数学成绩, dtype: int64)\n"
     ]
    }
   ],
   "source": [
    "## 异常值\n",
    "df =  pd.DataFrame({'数学成绩':[60,75,88,92,10,200,85]})\n",
    "def 检测异常值(ser):\n",
    "    mean = ser.mean()\n",
    "    std = ser.std()\n",
    "    条件= (ser<mean-3*std)| (ser > mean + 3*std)\n",
    "    return ser[条件]\n",
    "\n",
    "print(检测异常值(df['数学成绩']))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a7d21f46",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 23398 (\\N{CJK UNIFIED IDEOGRAPH-5B66}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 25104 (\\N{CJK UNIFIED IDEOGRAPH-6210}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 32489 (\\N{CJK UNIFIED IDEOGRAPH-7EE9}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 31665 (\\N{CJK UNIFIED IDEOGRAPH-7BB1}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 32447 (\\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py:151: UserWarning: Glyph 22270 (\\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "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": [
    "## 箱型图\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "df.boxplot(column='数学成绩')\n",
    "plt.title('数学成绩箱线图')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "ef917abe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   数学成绩\n",
      "0    60\n",
      "1    75\n",
      "2    88\n",
      "3    92\n",
      "4    60\n",
      "5    92\n",
      "6    85\n",
      "   数学成绩\n",
      "0    60\n",
      "1    75\n",
      "2    88\n",
      "3    92\n",
      "4    10\n",
      "5   200\n",
      "6    85\n",
      "0     60\n",
      "1     75\n",
      "2     88\n",
      "3     92\n",
      "4     10\n",
      "5    200\n",
      "6     85\n",
      "Name: 数学成绩, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "#替换异常值\n",
    "print(df.replace([10,200],[60,92]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "bfc33f73",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   数学成绩\n",
      "0    60\n",
      "1    75\n",
      "2    88\n",
      "3    92\n",
      "4    10\n",
      "5   200\n",
      "6    85 \n",
      "-------\n",
      "0     60\n",
      "1     75\n",
      "2     88\n",
      "3     92\n",
      "4     10\n",
      "5    200\n",
      "6     85\n",
      "Name: 数学成绩, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "##如何用最大最小值替换？\n",
    "print(df,'\\n-------')\n",
    "print(df['数学成绩'])\n",
    "#print(df.replace([10,200],[最小值?,df.replace(df['数学成绩'].max(),0)).max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "0d484398",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "object\n",
      "80907566\n",
      "int64\n",
      "311\n"
     ]
    }
   ],
   "source": [
    "#数据类型转换\n",
    "##转换前--是Object\n",
    "df =  pd.DataFrame({'分数':['80','90','75','66']})\n",
    "print(df['分数'].dtype)\n",
    "print(df['分数'].sum())\n",
    "##转换后--是整数int类型\n",
    "df['分数'] = df['分数'].astype('int64')\n",
    "print(df['分数'].dtype)\n",
    "print(df['分数'].sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "ba49f1f0",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   姓名  语文\n",
      "0  张三  80\n",
      "1  李四  90\n",
      "   姓名  语文\n",
      "0  王五  70\n",
      "1  赵六  85\n",
      "纵向拼接结果：\n",
      "   姓名  语文\n",
      "0  张三  80\n",
      "1  李四  90\n",
      "2  王五  70\n",
      "3  赵六  85\n"
     ]
    }
   ],
   "source": [
    "##表格合并\n",
    "import pandas as pd\n",
    "表1 = pd.DataFrame({'姓名':['张三','李四'], '语文':[80,90]})\n",
    "表2 = pd.DataFrame({'姓名':['王五','赵六'], '语文':[70,85]})\n",
    "print(表1)\n",
    "print(表2)\n",
    "# 上下合并，重置索引\n",
    "合并表 = pd.concat([表1, 表2], ignore_index=True)\n",
    "print(\"纵向拼接结果：\")\n",
    "print(合并表)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "fbd37ecf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   姓名  语文\n",
      "0  张三  80\n",
      "1  李四  90\n",
      "2  王五  70\n",
      "   姓名  数学\n",
      "0  张三  60\n",
      "1  李四  75\n",
      "2  赵六  88\n",
      "主键关联合并：\n",
      "   姓名  语文    数学\n",
      "0  张三  80  60.0\n",
      "1  李四  90  75.0\n",
      "2  王五  70   NaN\n"
     ]
    }
   ],
   "source": [
    "#左右关联\n",
    "import pandas as pd\n",
    "语文表 = pd.DataFrame({'姓名':['张三','李四','王五'], '语文':[80,90,70]})\n",
    "数学表 = pd.DataFrame({'姓名':['张三','李四','赵六'], '数学':[60,75,88]})\n",
    "print(语文表)\n",
    "print(数学表)\n",
    "# 按姓名字段左连接\n",
    "合并表 = pd.merge(语文表, 数学表, on='姓名', how='left')\n",
    "print(\"主键关联合并：\")\n",
    "print(合并表)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "3c5e45fb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   日期  商品  销量\n",
      "0  周一  苹果  10\n",
      "1  周一  香蕉  20\n",
      "2  周二  苹果  15\n",
      "3  周二  香蕉  25\n",
      "商品销量透视表：\n",
      "商品  苹果  香蕉\n",
      "日期        \n",
      "周一  10  20\n",
      "周二  15  25\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df = pd.DataFrame({\n",
    "'日期':['周一','周一','周二','周二'],\n",
    "'商品':['苹果','香蕉','苹果','香蕉'],\n",
    "'销量':[10,20,15,25]\n",
    "})\n",
    "print(df)\n",
    "# 生成透视表\n",
    "透视表 = df.pivot(index='日期', columns='商品', values='销量')\n",
    "print(\"商品销量透视表：\")\n",
    "print(透视表)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69c6b6ee",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
