{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "8d489687-27b4-4e9a-952e-7a012c306abe",
   "metadata": {},
   "source": [
    "## 缺失值的检测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "da4a95cf-d6e6-40a9-b66a-97a4e43dc762",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "2   NaN     7    11   NaN\n",
       "3   4.0     8    12   NaN"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "df_na = pd.DataFrame({'Num1':[1, 2, None, 4],\n",
    "                      'Num2':[5, 6, 7, 8],\n",
    "                      'Num3':[9, 10, 11, 12],\n",
    "                      'Num4':[13, 14, np.NaN, np.NaN]})\n",
    "df_na"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ca0b89c5-ba11-432e-87b3-433823b24336",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Num1   Num2   Num3   Num4\n",
       "0  False  False  False  False\n",
       "1  False  False  False  False\n",
       "2   True  False  False   True\n",
       "3  False  False  False   True"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.isnull(df_na)      # 检测数据中是否包含缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "142c9ec4-e16d-41ad-a5aa-2bd231501547",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Num1  Num2  Num3   Num4\n",
       "0   True  True  True   True\n",
       "1   True  True  True   True\n",
       "2  False  True  True  False\n",
       "3   True  True  True  False"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.notnull(df_na)      # 检测数据中是否不包含缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "84763915-2371-435b-9ec3-b539396151ff",
   "metadata": {},
   "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>数量</th>\n",
       "      <th>占比(%)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Num4</th>\n",
       "      <td>2</td>\n",
       "      <td>50.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Num1</th>\n",
       "      <td>1</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Num2</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Num3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      数量  占比(%)\n",
       "Num4   2   50.0\n",
       "Num1   1   25.0\n",
       "Num2   0    0.0\n",
       "Num3   0    0.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def missing_values_table(df):\n",
    "    # 计算每列包含缺失值的数量\n",
    "    mis_val = df.isnull().sum()\n",
    "    # 计算所有列缺失值⽐例\n",
    "    mis_val_percent = df.isnull().sum() / len(df) * 100\n",
    "    # 将数量和比例组合成DataFrame类的对象\n",
    "    mis_val_table = pd.DataFrame({'数量':mis_val,\n",
    "                                    '占比(%)':mis_val_percent})\n",
    "    # 按照缺失值的数量降序排列\n",
    "    mis_val_table_sorted = mis_val_table.sort_values('数量',\n",
    "                           ascending=False)\n",
    "    return mis_val_table_sorted\n",
    "missing_values_table(df_na)   # 统计缺失值的数量和占比情况"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ba91590-a075-4b67-a2b8-f128cec4e1d4",
   "metadata": {},
   "source": [
    "## 缺失值的处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93d58f98-dabb-4881-a186-4d7228263131",
   "metadata": {},
   "source": [
    "### 1.\t删除缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8ae6f230-359e-4f92-90a7-619ce6e5b815",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_na.dropna()      # 删除包含缺失值的行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "fa058331-0029-4502-ad94-006c33a4f598",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "3   4.0     8    12   NaN"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_na.dropna(thresh=3)      # 删除包含缺失值的行，并指定非缺失值的数量"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80531b9d-8e56-4e2e-bff7-b38abfd05722",
   "metadata": {},
   "source": [
    "### 2.\t填充缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "930e534f-7567-4f3a-87d3-9a19efd876b9",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "2   NaN     7    11   NaN\n",
       "3   4.0     8    12   NaN"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "df_na = pd.DataFrame({'Num1':[1, 2, None, 4],\n",
    "                      'Num2':[5, 6, 7, 8],\n",
    "                      'Num3':[9, 10, 11, 12],\n",
    "                      'Num4':[13, 14, np.NaN, np.NaN]})\n",
    "df_na"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "dae9c89c-db23-4609-ad39-f289f17fc0a8",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>66.0</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>66.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>66.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "2  66.0     7    11  66.0\n",
       "3   4.0     8    12  66.0"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_na.fillna(value=66.0)   # 使用标量66.0填充缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "55b765fb-acff-40d9-b678-2f85489fb837",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.3"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算Num1列的平均数，并保留一位小数\n",
    "mean_num1 = round(df_na['Num1'].mean(), 1)\n",
    "mean_num1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "68ca54fc-5001-4bbd-9005-e5493cafcdd5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "13.5"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算Num4列的平均数，并保留一位小数\n",
    "mean_num4 = round(df_na['Num4'].mean(), 1)\n",
    "mean_num4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8b972bef-eb14-4022-ace0-5a27aca41971",
   "metadata": {},
   "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.3</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>13.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>13.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "2   2.3     7    11  13.5\n",
       "3   4.0     8    12  13.5"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 给指定的列填充平均数\n",
    "df_na.fillna(value={'Num1':mean_num1, 'Num4':mean_num4})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "fa5d9ed6-9ab1-4c79-845f-e496a9cb3cc5",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\itcast\\AppData\\Local\\Temp\\ipykernel_13000\\3329080356.py:1: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df_na.fillna(method='ffill')         # 采用前向填充的方式填充缺失值\n"
     ]
    },
    {
     "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.0</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "2   2.0     7    11  14.0\n",
       "3   4.0     8    12  14.0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_na.fillna(method='ffill')         # 采用前向填充的方式填充缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "3bc5a1c5-8b16-4125-b9a9-0cb6bff02704",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\itcast\\AppData\\Local\\Temp\\ipykernel_13000\\3926686581.py:1: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df_na.fillna(method='bfill')  # 采用后向填充的方式填充缺失值\n"
     ]
    },
    {
     "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>Num1</th>\n",
       "      <th>Num2</th>\n",
       "      <th>Num3</th>\n",
       "      <th>Num4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.0</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Num1  Num2  Num3  Num4\n",
       "0   1.0     5     9  13.0\n",
       "1   2.0     6    10  14.0\n",
       "2   4.0     7    11   NaN\n",
       "3   4.0     8    12   NaN"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_na.fillna(method='bfill')  # 采用后向填充的方式填充缺失值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa2fb2ee-4343-4423-8c08-3da82e82126e",
   "metadata": {},
   "source": [
    "## 重复值的检测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "be3dd33d-abd0-429b-942a-47f519fcd029",
   "metadata": {},
   "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>name</th>\n",
       "      <th>age</th>\n",
       "      <th>height(cm)</th>\n",
       "      <th>gender</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>张三</td>\n",
       "      <td>24</td>\n",
       "      <td>162</td>\n",
       "      <td>女</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>李四</td>\n",
       "      <td>23</td>\n",
       "      <td>165</td>\n",
       "      <td>女</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>王五</td>\n",
       "      <td>29</td>\n",
       "      <td>175</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>赵六</td>\n",
       "      <td>22</td>\n",
       "      <td>175</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>赵六</td>\n",
       "      <td>22</td>\n",
       "      <td>175</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>孙七</td>\n",
       "      <td>27</td>\n",
       "      <td>180</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  name  age  height(cm) gender\n",
       "0   张三   24         162      女\n",
       "1   李四   23         165      女\n",
       "2   王五   29         175      男\n",
       "3   赵六   22         175      男\n",
       "4   赵六   22         175      男\n",
       "5   孙七   27         180      男"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "person_info = pd.DataFrame({'name':['张三', '李四', '王五', '赵六', '赵六', '孙七'],\n",
    "                            'age': [24, 23, 29, 22, 22, 27],\n",
    "                            'height(cm)': [162, 165, 175, 175, 175, 180],\n",
    "                            'gender': ['女', '女', '男', '男', '男', '男']})\n",
    "person_info"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "92c812d9-babb-40bb-80b1-4b375f69fb30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    False\n",
       "1    False\n",
       "2    False\n",
       "3    False\n",
       "4     True\n",
       "5    False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 检测重复值，保留第一次出现的行，标记再次出现的其他行为重复值\n",
    "person_info.duplicated()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88b30f67-9c63-4fc5-a121-b36e8b6070ba",
   "metadata": {},
   "source": [
    "## 重复值的处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "53048d29-0b0a-47a1-b5a8-8d5954cce150",
   "metadata": {},
   "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>name</th>\n",
       "      <th>age</th>\n",
       "      <th>height</th>\n",
       "      <th>gender</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>张三</td>\n",
       "      <td>24</td>\n",
       "      <td>162</td>\n",
       "      <td>女</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>李四</td>\n",
       "      <td>23</td>\n",
       "      <td>165</td>\n",
       "      <td>女</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>王五</td>\n",
       "      <td>29</td>\n",
       "      <td>175</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>赵六</td>\n",
       "      <td>22</td>\n",
       "      <td>175</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>孙七</td>\n",
       "      <td>27</td>\n",
       "      <td>180</td>\n",
       "      <td>男</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  name  age  height gender\n",
       "0   张三   24     162      女\n",
       "1   李四   23     165      女\n",
       "2   王五   29     175      男\n",
       "3   赵六   22     175      男\n",
       "5   孙七   27     180      男"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "person_info.drop_duplicates()   # 删除重复值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76649ae8-0e54-4032-b993-dfacb7aa25ba",
   "metadata": {},
   "source": [
    "## 异常值的检测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cbebbdd-1002-46ca-b474-3f0ecc307556",
   "metadata": {},
   "source": [
    "### 1.\t通过3σ原则检测异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "98dc5e74-7a9a-4790-b3c2-e5556b5e88a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "def three_sigma(ser):\n",
    "    \"\"\"\n",
    "    :param ser: 被检测的数据，接收DataFrame类的对象的一列数据\n",
    "    :return: 异常值及其对应的行索引\n",
    "    \"\"\"\n",
    "    # 计算平均值和标准差\n",
    "    mean_data = ser.mean()\n",
    "    std_data = ser.std()\n",
    "    # 根据3σ原则组合检测条件，即小于μ-3σ或大于μ+3σ\n",
    "    rule = (mean_data - 3 * std_data > ser) | (mean_data +\n",
    "         3 * std_data < ser)\n",
    "    # 获取异常值的行索引\n",
    "    index = np.arange(ser.shape[0])[rule]\n",
    "    # 根据行索引获取异常值\n",
    "    outliers = ser.iloc[index]\n",
    "    return outliers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "23de793d-f0cf-4197-800b-4150256c41ae",
   "metadata": {},
   "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",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>30</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>23</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A  B\n",
       "0    1  2\n",
       "1    2  3\n",
       "2    3  8\n",
       "3    4  5\n",
       "4    5  6\n",
       "5    6  7\n",
       "6   30  8\n",
       "7    3  9\n",
       "8    3  0\n",
       "9    4  3\n",
       "10   5  4\n",
       "11   3  5\n",
       "12   2  6\n",
       "13   4  7\n",
       "14   5  2\n",
       "15  23  4\n",
       "16   2  5\n",
       "17   5  6\n",
       "18   3  4"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df_obj = pd.read_csv(r'data\\outlier_data.csv')\n",
    "df_obj"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "4c021ab2-02c8-43ea-84ba-f9ccbb76152d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6    30\n",
       "Name: A, dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "three_sigma(df_obj['A'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "af7ac4c6-e8a8-41af-99a3-65e64deddef2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Series([], Name: B, dtype: int64)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "three_sigma(df_obj['B'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cb12709-132a-4ab6-b0a9-dc430487bacb",
   "metadata": {},
   "source": [
    "### 2.\t通过箱形图检测异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "e420249c-60b2-4add-80b5-cec5af7388f8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_obj = pd.read_csv(r'data\\example_data.csv')\n",
    "df_obj.boxplot(column=['A', 'B'])   # 绘制箱形图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "fc29fac3-d0c1-450e-94d6-abcee88b20a8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([50, 23], dtype=object)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df_obj = pd.read_csv(r'data\\example_data.csv')\n",
    "# 绘制箱形图，指定返回值的类型为字典\n",
    "box_dict = df_obj.boxplot(column=['A', 'B'], return_type='dict')   \n",
    "# 获取箱形中左侧图形中空心圆圈的y值\n",
    "box_dict['fliers'][0].get_ydata()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "c7d1b7da-a185-452a-971b-1b727a3309f1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5     50\n",
       "15    23\n",
       "Name: A, dtype: int64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "def box_outliers(ser):\n",
    "    # 对待检测的数据集进行排序\n",
    "    new_ser = ser.sort_values()\n",
    "    # 判断数据的总数量是奇数还是偶数\n",
    "    if new_ser.count() % 2 == 0:\n",
    "        # 计算Q3、Q1、IQR\n",
    "        Q3 = new_ser[int(len(new_ser) / 2):].median()\n",
    "        Q1 = new_ser[:int(len(new_ser) / 2)].median()\n",
    "    elif new_ser.count() % 2 != 0:\n",
    "        Q3 = new_ser[int((len(new_ser)-1) / 2):].median()\n",
    "        Q1 = new_ser[:int((len(new_ser)-1) / 2)].median()\n",
    "    IQR = round(Q3 - Q1, 1)\n",
    "    rule = (round(Q3+1.5*IQR, 1) < ser)|(round(Q1-1.5*IQR, 1) > ser)\n",
    "    index = np.arange(ser.shape[0])[rule]\n",
    "    # 获取异常值及其对应的索引\n",
    "    outliers = ser.iloc[index]\n",
    "    return outliers\n",
    "box_outliers(df_obj['A'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "838d9ae3-1dc5-45ce-a48c-d3e7f77be692",
   "metadata": {},
   "source": [
    "## 异常值的处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "fafd90f3-0bd4-47f0-aca9-1f90759cce89",
   "metadata": {},
   "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",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>50</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A  B\n",
       "0    1  2\n",
       "1    2  3\n",
       "2    3  8\n",
       "3    4  5\n",
       "4    5  6\n",
       "5   50  7\n",
       "6    2  8\n",
       "7    3  9\n",
       "8    3  0\n",
       "9    4  3\n",
       "10   5  4\n",
       "11   3  5\n",
       "12   2  6\n",
       "13   4  7\n",
       "14   5  2\n",
       "15   3  4\n",
       "16   2  5\n",
       "17   5  6\n",
       "18   3  4"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_obj.replace(to_replace=23, value=3)   # 替换一个异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "b4db425a-4959-423a-a81b-99c05619a094",
   "metadata": {},
   "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",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    A  B\n",
       "0   1  2\n",
       "1   2  3\n",
       "2   3  8\n",
       "3   4  5\n",
       "4   5  6\n",
       "5   2  7\n",
       "6   2  8\n",
       "7   3  9\n",
       "8   3  0\n",
       "9   4  3\n",
       "10  5  4\n",
       "11  3  5\n",
       "12  2  6\n",
       "13  4  7\n",
       "14  5  2\n",
       "15  3  4\n",
       "16  2  5\n",
       "17  5  6\n",
       "18  3  4"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_obj.replace(to_replace=[23, 50], value=[3, 2])   # 替换多个异常值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29954467-dfe4-41d3-98c0-a3d276b5098a",
   "metadata": {},
   "source": [
    "## 转换数据类型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "daa7e8be-a090-461e-9383-aae15a0041bf",
   "metadata": {},
   "source": [
    "### 1.\t通过astype()方法转换数据的类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "3e223533-0297-466d-abf9-8bd692bf72b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    object\n",
       "B    object\n",
       "C    object\n",
       "dtype: object"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df = pd.DataFrame({'A': ['1', '1.2', '4.2'], 'B': ['-9', '70', '88'],\n",
    "                   'C': ['x', '5.0', '0']})\n",
    "df.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "ec88d100-fd1a-4951-9f32-bfe72966c303",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    -9\n",
       "1    70\n",
       "2    88\n",
       "Name: B, dtype: int32"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['B'].astype(dtype='int')  # 转换为整数类型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e182566-4e73-4597-a1e2-7a18842fe79b",
   "metadata": {},
   "source": [
    "### 2.\t通过to_numeric()函数转换数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "0d005fe8-a1a0-4a20-9af3-ebe4dfbee91c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.5\n",
       "1    2.2\n",
       "2    3.8\n",
       "dtype: object"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "ser_obj = pd.Series(['1.5', '2.2', '3.8'])\n",
    "ser_obj"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "08219081-5e6c-457c-802a-27beacc96afe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.5\n",
       "1    2.2\n",
       "2    3.8\n",
       "dtype: float64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将object类型转换浮点型\n",
    "pd.to_numeric(ser_obj)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "8581fc78-8ab4-4111-ad64-cbee8d4e62df",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "Unable to parse string \"problem\" at position 2",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "File \u001b[1;32mlib.pyx:2374\u001b[0m, in \u001b[0;36mpandas._libs.lib.maybe_convert_numeric\u001b[1;34m()\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: Unable to parse string \"problem\"",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[32], line 2\u001b[0m\n\u001b[0;32m      1\u001b[0m ser_obj[\u001b[38;5;241m2\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mproblem\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m----> 2\u001b[0m pd\u001b[38;5;241m.\u001b[39mto_numeric(ser_obj)\n",
      "File \u001b[1;32m~\\anaconda3\\Lib\\site-packages\\pandas\\core\\tools\\numeric.py:222\u001b[0m, in \u001b[0;36mto_numeric\u001b[1;34m(arg, errors, downcast, dtype_backend)\u001b[0m\n\u001b[0;32m    220\u001b[0m coerce_numeric \u001b[38;5;241m=\u001b[39m errors \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mraise\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m    221\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 222\u001b[0m     values, new_mask \u001b[38;5;241m=\u001b[39m lib\u001b[38;5;241m.\u001b[39mmaybe_convert_numeric(  \u001b[38;5;66;03m# type: ignore[call-overload]  # noqa: E501\u001b[39;00m\n\u001b[0;32m    223\u001b[0m         values,\n\u001b[0;32m    224\u001b[0m         \u001b[38;5;28mset\u001b[39m(),\n\u001b[0;32m    225\u001b[0m         coerce_numeric\u001b[38;5;241m=\u001b[39mcoerce_numeric,\n\u001b[0;32m    226\u001b[0m         convert_to_masked_nullable\u001b[38;5;241m=\u001b[39mdtype_backend \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m lib\u001b[38;5;241m.\u001b[39mno_default\n\u001b[0;32m    227\u001b[0m         \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(values_dtype, StringDtype)\n\u001b[0;32m    228\u001b[0m         \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m values_dtype\u001b[38;5;241m.\u001b[39mstorage \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpyarrow_numpy\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m    229\u001b[0m     )\n\u001b[0;32m    230\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mValueError\u001b[39;00m, \u001b[38;5;167;01mTypeError\u001b[39;00m):\n\u001b[0;32m    231\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m errors \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mraise\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n",
      "File \u001b[1;32mlib.pyx:2416\u001b[0m, in \u001b[0;36mpandas._libs.lib.maybe_convert_numeric\u001b[1;34m()\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: Unable to parse string \"problem\" at position 2"
     ]
    }
   ],
   "source": [
    "ser_obj[2] = 'problem'\n",
    "pd.to_numeric(ser_obj)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "ec66e97e-324b-4241-944f-8b63187b8c86",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        1.5\n",
       "1        2.2\n",
       "2    problem\n",
       "dtype: object"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 忽略非数字的值\n",
    "pd.to_numeric(ser_obj, errors='ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "1ae224c9-3d85-4b7b-bc40-e69a0a8cb4b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.5\n",
       "1    2.2\n",
       "2    NaN\n",
       "dtype: float64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将非数字的值设置成NaN\n",
    "pd.to_numeric(ser_obj, errors ='coerce')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f1b467f-668e-452a-85c6-4094eaa48cec",
   "metadata": {},
   "source": [
    "## 查看摘要信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "18ef0db3-6918-4443-a1ce-bee395d4d495",
   "metadata": {},
   "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>No1</th>\n",
       "      <th>No2</th>\n",
       "      <th>No3</th>\n",
       "      <th>No4</th>\n",
       "      <th>No5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>8.0</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16</td>\n",
       "      <td>17</td>\n",
       "      <td>NaN</td>\n",
       "      <td>19</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>21</td>\n",
       "      <td>22</td>\n",
       "      <td>23.0</td>\n",
       "      <td>24</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>26</td>\n",
       "      <td>27</td>\n",
       "      <td>28.0</td>\n",
       "      <td>29</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   No1  No2   No3  No4  No5\n",
       "0    1    2   3.0    4    5\n",
       "1    6    7   8.0    9   10\n",
       "2   11   12   NaN   14   15\n",
       "3   16   17   NaN   19   20\n",
       "4   21   22  23.0   24   25\n",
       "5   26   27  28.0   29   30"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "arr_2d = np.arange(1, 31).reshape((6, 5)) \n",
    "df_obj = pd.DataFrame(data=arr_2d, columns=['No1', 'No2', 'No3', 'No4', 'No5'])\n",
    "# 将指定位置的值修改为NaN\n",
    "df_obj.iloc[2, 2] = np.NaN\n",
    "df_obj.iloc[3, 2] = np.NaN\n",
    "df_obj"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "5ba620d3-31b2-4fcb-97df-81394e2245db",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 6 entries, 0 to 5\n",
      "Data columns (total 5 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   No1     6 non-null      int32  \n",
      " 1   No2     6 non-null      int32  \n",
      " 2   No3     4 non-null      float64\n",
      " 3   No4     6 non-null      int32  \n",
      " 4   No5     6 non-null      int32  \n",
      "dtypes: float64(1), int32(4)\n",
      "memory usage: 276.0 bytes\n"
     ]
    }
   ],
   "source": [
    "df_obj.info()     # 查看df_obj对象的摘要信息"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99fa9dc2-6a9b-4190-9814-b20d472571a2",
   "metadata": {},
   "source": [
    "## 【任务4-1】清洗二手房数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d53e1360-e097-42f8-9659-209a4980f36c",
   "metadata": {},
   "source": [
    "### 1.\t获取二手房数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "ed740571-bdee-4f33-a835-fe5a0da20722",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 500 entries, 0 to 499\n",
      "Data columns (total 7 columns):\n",
      " #   Column    Non-Null Count  Dtype \n",
      "---  ------    --------------  ----- \n",
      " 0   区         500 non-null    object\n",
      " 1   小区名称      499 non-null    object\n",
      " 2   标题        500 non-null    object\n",
      " 3   房屋信息      500 non-null    object\n",
      " 4   关注        500 non-null    object\n",
      " 5   地铁        211 non-null    object\n",
      " 6   单价(元/平米)  500 non-null    object\n",
      "dtypes: object(7)\n",
      "memory usage: 27.5+ KB\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "houses_one = pd.read_excel(r'data\\secondhandhouse_one.xlsx')\n",
    "houses_one.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "c27f8e65-54f6-403e-8457-0421401c8666",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 500 entries, 0 to 499\n",
      "Data columns (total 7 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   区         500 non-null    object \n",
      " 1   小区名称      499 non-null    object \n",
      " 2   标题        500 non-null    object \n",
      " 3   房屋信息      500 non-null    object \n",
      " 4   关注        500 non-null    object \n",
      " 5   地铁        211 non-null    object \n",
      " 6   单价(元/平米)  500 non-null    float64\n",
      "dtypes: float64(1), object(6)\n",
      "memory usage: 27.5+ KB\n"
     ]
    }
   ],
   "source": [
    "# 转换单价(元/平方米)一列的数据类型\n",
    "import re\n",
    "old_values = []\n",
    "new_values = []\n",
    "for price_text in houses_one['单价(元/平方米)']:\n",
    "    result = re.findall('\\d+.\\d元$', str(price_text))\n",
    "    if len(result) != 0:\n",
    "        old_values.append(result[0])\n",
    "        new_result = result[0][:-1]\n",
    "        new_values.append(new_result)\n",
    "new_house_one = houses_one.replace(to_replace=old_values, value=new_values)\n",
    "# 将数据类型由object转换为float64\n",
    "new_house_one['单价(元/平方米)'] = new_house_one['单价(元/平方米)'].astype(dtype='float')\n",
    "new_house_one.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f91d2508-65c6-4bff-8dce-63ca2c0fddd9",
   "metadata": {},
   "source": [
    "### 2.\t检测与处理缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "6d30cc82-2b38-4c16-b2ba-6113d3207ebf",
   "metadata": {},
   "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>数量</th>\n",
       "      <th>占比(%)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>地铁</th>\n",
       "      <td>289</td>\n",
       "      <td>57.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>小区名称</th>\n",
       "      <td>1</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>区</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>标题</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>房屋信息</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>关注</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>单价(元/平米)</th>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           数量  占比(%)\n",
       "地铁        289   57.8\n",
       "小区名称        1    0.2\n",
       "区           0    0.0\n",
       "标题          0    0.0\n",
       "房屋信息        0    0.0\n",
       "关注          0    0.0\n",
       "单价(元/平米)    0    0.0"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def missing_values_table(df):\n",
    "    # 计算每列包含缺失值的数量\n",
    "    mis_val = df.isnull().sum()\n",
    "    # 计算所有列缺失值⽐例\n",
    "    mis_val_percent = df.isnull().sum() / len(df) * 100\n",
    "    # 将数量和比例组合成DataFrame类的对象\n",
    "    mis_val_table = pd.DataFrame({'数量':mis_val, '占比(%)':mis_val_percent})\n",
    "    # 按照缺失值的数量降序排列\n",
    "    mis_val_table_sorted = mis_val_table.sort_values('数量',\n",
    "                                ascending=False)\n",
    "    return mis_val_table_sorted\n",
    "# 统计缺失值的数量和占比情况\n",
    "missing_values_table(new_house_one) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "f5dc4530-14e1-4745-bd0e-079cb981c5b1",
   "metadata": {},
   "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>区</th>\n",
       "      <th>小区名称</th>\n",
       "      <th>标题</th>\n",
       "      <th>房屋信息</th>\n",
       "      <th>关注</th>\n",
       "      <th>地铁</th>\n",
       "      <th>单价(元/平米)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>锦江</td>\n",
       "      <td>翡翠城四期</td>\n",
       "      <td>翡翠城四期跃层 采光视野好 可看沙河 客厅带有阳台</td>\n",
       "      <td>高楼层(共29层)| 2009年建 |2室1厅 | 85.21平米 | 东南</td>\n",
       "      <td>331人关注/ 5月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>176036.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>锦江</td>\n",
       "      <td>时代豪庭一期</td>\n",
       "      <td>时代豪庭套三 中间楼层 有装修 业主处理资产出售</td>\n",
       "      <td>中楼层(共38层)| 2009年建 |3室1厅 | 155.79平米| 东南</td>\n",
       "      <td>137人关注/ 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>26959.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>锦江</td>\n",
       "      <td>卓锦城六期</td>\n",
       "      <td>卓锦城六期紫郡房源，套三，进门带入户</td>\n",
       "      <td>中楼层(共31层)| 2014年建 |3室1厅 | 89.33平米| 西南</td>\n",
       "      <td>36人关注 / 23天前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22612.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>锦江</td>\n",
       "      <td>星城银座</td>\n",
       "      <td>春熙路太古里标准套一出售，现租给民宿。</td>\n",
       "      <td>高楼层(共11层) | 2003年建 | 1室0厅 | 51.07平米 | 南</td>\n",
       "      <td>29人关注 / 5月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>18014.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>锦江</td>\n",
       "      <td>新莲新苑</td>\n",
       "      <td>新莲新苑优质套三，诚心出售，近沙河，采光视野好。</td>\n",
       "      <td>高楼层(共7层) | 2001年建 | 3室1厅 | 77.7平米 | 东南</td>\n",
       "      <td>14人关注 / 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13513.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>495</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东顺城南街51号</td>\n",
       "      <td>东顺城南街51号院，无抵押。满五唯一没有个税</td>\n",
       "      <td>高楼层(共7层) | 1992年建 | 2室2厅 | 66.1平米 | 南</td>\n",
       "      <td>78人关注 / 1年前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>21028.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>496</th>\n",
       "      <td>锦江</td>\n",
       "      <td>育才都市家园二期</td>\n",
       "      <td>育才套二、有家具家电、房东自住</td>\n",
       "      <td>低楼层(共11层) | 2006年建 | 2室1厅 | 80.74平米 | 东南</td>\n",
       "      <td>31人关注 / 7月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>19816.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>497</th>\n",
       "      <td>锦江</td>\n",
       "      <td>嘉和园二期</td>\n",
       "      <td>多层住宅无电梯，户型结构合理，居家适宜</td>\n",
       "      <td>高楼层(共6层) | 2002年建 | 1室1厅 | 55.42平米 | 东南</td>\n",
       "      <td>13人关注 / 9月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>12630.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>498</th>\n",
       "      <td>锦江</td>\n",
       "      <td>学道街42号</td>\n",
       "      <td>省教育厅单位房 大套三 采光好 适合一家人居住</td>\n",
       "      <td>低楼层(共28层) | 2002年建 | 3室2厅 | 146.77平米 | 西南</td>\n",
       "      <td>33人关注 / 8月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>28616.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>499</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东洪广厦</td>\n",
       "      <td>东洪广厦 3室2厅 东南 西北</td>\n",
       "      <td>中楼层(共32层) | 2013年建 | 3室2厅 | 90.04平米 | 东南 西北</td>\n",
       "      <td>2人关注 / 19天前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16825.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>499 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      区      小区名称                         标题  \\\n",
       "0    锦江     翡翠城四期  翡翠城四期跃层 采光视野好 可看沙河 客厅带有阳台   \n",
       "1    锦江    时代豪庭一期   时代豪庭套三 中间楼层 有装修 业主处理资产出售   \n",
       "2    锦江     卓锦城六期         卓锦城六期紫郡房源，套三，进门带入户   \n",
       "3    锦江      星城银座        春熙路太古里标准套一出售，现租给民宿。   \n",
       "4    锦江      新莲新苑   新莲新苑优质套三，诚心出售，近沙河，采光视野好。   \n",
       "..   ..       ...                        ...   \n",
       "495  锦江  东顺城南街51号     东顺城南街51号院，无抵押。满五唯一没有个税   \n",
       "496  锦江  育才都市家园二期            育才套二、有家具家电、房东自住   \n",
       "497  锦江     嘉和园二期        多层住宅无电梯，户型结构合理，居家适宜   \n",
       "498  锦江    学道街42号    省教育厅单位房 大套三 采光好 适合一家人居住   \n",
       "499  锦江      东洪广厦            东洪广厦 3室2厅 东南 西北   \n",
       "\n",
       "                                            房屋信息              关注   地铁  \\\n",
       "0         高楼层(共29层)| 2009年建 |2室1厅 | 85.21平米 | 东南   331人关注/ 5月前发布  近地铁   \n",
       "1         中楼层(共38层)| 2009年建 |3室1厅 | 155.79平米| 东南   137人关注/ 5月前发布  NaN   \n",
       "2          中楼层(共31层)| 2014年建 |3室1厅 | 89.33平米| 西南  36人关注 / 23天前发布  NaN   \n",
       "3        高楼层(共11层) | 2003年建 | 1室0厅 | 51.07平米 | 南   29人关注 / 5月前发布  近地铁   \n",
       "4         高楼层(共7层) | 2001年建 | 3室1厅 | 77.7平米 | 东南   14人关注 / 5月前发布  NaN   \n",
       "..                                           ...             ...  ...   \n",
       "495        高楼层(共7层) | 1992年建 | 2室2厅 | 66.1平米 | 南   78人关注 / 1年前发布  近地铁   \n",
       "496     低楼层(共11层) | 2006年建 | 2室1厅 | 80.74平米 | 东南   31人关注 / 7月前发布  近地铁   \n",
       "497      高楼层(共6层) | 2002年建 | 1室1厅 | 55.42平米 | 东南   13人关注 / 9月前发布  近地铁   \n",
       "498    低楼层(共28层) | 2002年建 | 3室2厅 | 146.77平米 | 西南   33人关注 / 8月前发布  NaN   \n",
       "499  中楼层(共32层) | 2013年建 | 3室2厅 | 90.04平米 | 东南 西北   2人关注 / 19天前发布  NaN   \n",
       "\n",
       "     单价(元/平米)  \n",
       "0    176036.0  \n",
       "1     26959.4  \n",
       "2     22612.8  \n",
       "3     18014.5  \n",
       "4     13513.5  \n",
       "..        ...  \n",
       "495   21028.7  \n",
       "496   19816.7  \n",
       "497   12630.8  \n",
       "498   28616.2  \n",
       "499   16825.9  \n",
       "\n",
       "[499 rows x 7 columns]"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除小区名称一列的缺失值\n",
    "new_house_one = new_house_one.dropna(subset=['小区名称'])\n",
    "new_house_one"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c81b89a4-d439-4321-b95b-792bf2345d04",
   "metadata": {},
   "source": [
    "### 3.\t检测与处理重复值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "ddf852b9-b30a-4ed1-a7fc-19eb72f3f54d",
   "metadata": {},
   "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>区</th>\n",
       "      <th>小区名称</th>\n",
       "      <th>标题</th>\n",
       "      <th>房屋信息</th>\n",
       "      <th>关注</th>\n",
       "      <th>地铁</th>\n",
       "      <th>单价(元/平米)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>锦江</td>\n",
       "      <td>柳江新居五期</td>\n",
       "      <td>琉璃场柳江新居五期带装修套二，房东诚心出售</td>\n",
       "      <td>低楼层(共18层) | 2010年建 | 2室1厅 | 80.97平米 | 南 北</td>\n",
       "      <td>58人关注 / 3月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>13832.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>锦江</td>\n",
       "      <td>锦洲花园</td>\n",
       "      <td>此房是锦洲花园中庭跃层，顶楼带大花园</td>\n",
       "      <td>高楼层(共6层) | 2004年建 | 3室2厅 | 124.68平米 | 西北</td>\n",
       "      <td>135人关注 / 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>19890.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>锦江</td>\n",
       "      <td>澳龙名城</td>\n",
       "      <td>澳龙名城标准套四双卫随时可看房！</td>\n",
       "      <td>低楼层(共16层) | 2009年建 | 4室2厅 | 116.58平米 | 东南 西北</td>\n",
       "      <td>95人关注 / 8月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>25561.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>锦江</td>\n",
       "      <td>嘉和园二期</td>\n",
       "      <td>锦江 川师 狮子山 嘉和园 套二出售</td>\n",
       "      <td>低楼层(共6层) | 2002年建 | 2室2厅 | 74平米 | 东</td>\n",
       "      <td>19人关注 / 8月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>12567.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>锦江</td>\n",
       "      <td>钢管厂五区</td>\n",
       "      <td>海椒市街15号标准套二，户型方正不临街。</td>\n",
       "      <td>高楼层(共7层) | 1988年建 | 2室1厅 | 82平米 | 东南</td>\n",
       "      <td>60人关注 / 1年前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11097.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>锦江</td>\n",
       "      <td>水碾河路南46号</td>\n",
       "      <td>水碾河 底层 家带店 标准套二</td>\n",
       "      <td>低楼层(共6层) | 1998年建 | 2室1厅 | 56.28平米 | 东南</td>\n",
       "      <td>55人关注 / 4月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>12970.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>锦江</td>\n",
       "      <td>蓝润锦江春天</td>\n",
       "      <td>蓝润锦江春天 标准套二  家具家电全带</td>\n",
       "      <td>低楼层(共18层) | 2015年建 | 2室1厅 | 54.29平米 | 西南</td>\n",
       "      <td>7人关注 / 3月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20261.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>锦江</td>\n",
       "      <td>宏济新路95号</td>\n",
       "      <td>装修很好的套二，拎包入住，相当新</td>\n",
       "      <td>高楼层(共6层) | 1985年建 | 2室1厅 | 56.76平米 | 西南</td>\n",
       "      <td>123人关注 / 7月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13037.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129</th>\n",
       "      <td>锦江</td>\n",
       "      <td>绿地468公馆三期</td>\n",
       "      <td>绿地468公馆三期清水套二，户型方正。</td>\n",
       "      <td>高楼层(共33层) | 2015年建 | 2室1厅 | 77平米 | 东南</td>\n",
       "      <td>78人关注 / 4月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20324.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>254</th>\n",
       "      <td>锦江</td>\n",
       "      <td>沙河壹号一期</td>\n",
       "      <td>沙河壹号，房东诚心卖，高楼层，采光好，视野开阔！！</td>\n",
       "      <td>高楼层(共34层) | 2011年建 | 2室1厅 | 72.89平米 | 西</td>\n",
       "      <td>123人关注 / 8月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>18521.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>255</th>\n",
       "      <td>锦江</td>\n",
       "      <td>嘉和园一期</td>\n",
       "      <td>房东诚心出售，交通便利 配套齐全。</td>\n",
       "      <td>中楼层(共6层) | 2002年建 | 2室2厅 | 78.29平米 | 东南 西北</td>\n",
       "      <td>20人关注 / 6月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>12517.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>256</th>\n",
       "      <td>锦江</td>\n",
       "      <td>鑫苑名家二期</td>\n",
       "      <td>鑫苑名家套三住宅，居家装修，业主自住保养好。</td>\n",
       "      <td>中楼层(共40层) | 2012年建 | 3室1厅 | 86.03平米 | 北</td>\n",
       "      <td>24人关注 / 3月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20341.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>257</th>\n",
       "      <td>锦江</td>\n",
       "      <td>鑫苑名家一期</td>\n",
       "      <td>鑫苑名家一期，套二带装修，中间楼层，</td>\n",
       "      <td>高楼层(共34层) | 2011年建 | 2室1厅 | 79平米 | 东南</td>\n",
       "      <td>48人关注 / 4月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15569.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>258</th>\n",
       "      <td>锦江</td>\n",
       "      <td>紫东梵谷二期</td>\n",
       "      <td>紫东丽景套二，户型方正，低楼层</td>\n",
       "      <td>低楼层(共6层) | 2008年建 | 2室2厅 | 83.25平米 | 东南</td>\n",
       "      <td>51人关注 / 1年前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13813.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259</th>\n",
       "      <td>锦江</td>\n",
       "      <td>世纪朝阳</td>\n",
       "      <td>九眼桥一环边世纪朝阳对中庭套三</td>\n",
       "      <td>高楼层(共26层) | 2005年建 | 3室1厅 | 126.65平米 | 东北</td>\n",
       "      <td>14人关注 / 3月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22108.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>260</th>\n",
       "      <td>锦江</td>\n",
       "      <td>天涯南苑</td>\n",
       "      <td>带屋顶花园 标准套三双卫 带阳台</td>\n",
       "      <td>高楼层(共7层) | 2000年建 | 3室2厅 | 154.13平米 | 东</td>\n",
       "      <td>39人关注 / 3月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20437.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>261</th>\n",
       "      <td>锦江</td>\n",
       "      <td>中粮鸿云</td>\n",
       "      <td>此房是标准套二，户型方正，精装修，未住人</td>\n",
       "      <td>高楼层(共40层) | 2017年建 | 2室1厅 | 66平米 | 西南</td>\n",
       "      <td>90人关注 / 8月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31515.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>锦江</td>\n",
       "      <td>创意山</td>\n",
       "      <td>创意山公寓，单价便宜，交通方便出行</td>\n",
       "      <td>低楼层(共22层) | 2017年建 | 2室1厅 | 70.24平米 | 南</td>\n",
       "      <td>9人关注 / 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10962.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>263</th>\n",
       "      <td>锦江</td>\n",
       "      <td>总府花园</td>\n",
       "      <td>总府花园  有电梯  看房需要提前预约</td>\n",
       "      <td>低楼层(共30层) | 2000年建 | 3室1厅 | 98.55平米 | 西南</td>\n",
       "      <td>62人关注 / 9月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>20801.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>349</th>\n",
       "      <td>锦江</td>\n",
       "      <td>蓝润锦江春天</td>\n",
       "      <td>蓝润锦江春天套三，东北朝向，看房预约。</td>\n",
       "      <td>中楼层(共18层) | 2016年建 | 3室2厅 | 71.76平米 | 东北</td>\n",
       "      <td>137人关注 / 1年前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18812.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>350</th>\n",
       "      <td>锦江</td>\n",
       "      <td>西部国际金融中心</td>\n",
       "      <td>西部国际高品质小区，开发商统一装修，保养好，采光好</td>\n",
       "      <td>高楼层(共47层) 2室1厅 | 82.64平米 | 东 东北</td>\n",
       "      <td>2人关注 / 28天前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>37512.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>477</th>\n",
       "      <td>锦江</td>\n",
       "      <td>海桐二期</td>\n",
       "      <td>海桐二期居家套一，客厅带阳台，卧室带飘窗</td>\n",
       "      <td>中楼层(共18层) | 2010年建 | 1室1厅 | 50.18平米 | 东南</td>\n",
       "      <td>35人关注 / 1年前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13949.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>478</th>\n",
       "      <td>锦江</td>\n",
       "      <td>翡翠城四期</td>\n",
       "      <td>翡翠城四期套二双卫，中间楼层，视野好。</td>\n",
       "      <td>高楼层(共29层) | 2009年建 | 2室1厅 | 96.57平米 | 东南</td>\n",
       "      <td>12人关注 / 9月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>21331.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>479</th>\n",
       "      <td>锦江</td>\n",
       "      <td>锦江城市花园二期</td>\n",
       "      <td>锦江区 三圣乡 锦江城市花园二期，房东诚心出售！</td>\n",
       "      <td>高楼层(共34层) | 2010年建 | 3室1厅 | 81.82平米 | 东南</td>\n",
       "      <td>20人关注 / 4月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18235.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      区       小区名称                         标题  \\\n",
       "54   锦江     柳江新居五期      琉璃场柳江新居五期带装修套二，房东诚心出售   \n",
       "55   锦江       锦洲花园         此房是锦洲花园中庭跃层，顶楼带大花园   \n",
       "97   锦江       澳龙名城           澳龙名城标准套四双卫随时可看房！   \n",
       "98   锦江      嘉和园二期         锦江 川师 狮子山 嘉和园 套二出售   \n",
       "99   锦江      钢管厂五区       海椒市街15号标准套二，户型方正不临街。   \n",
       "100  锦江   水碾河路南46号            水碾河 底层 家带店 标准套二   \n",
       "101  锦江     蓝润锦江春天        蓝润锦江春天 标准套二  家具家电全带   \n",
       "102  锦江    宏济新路95号           装修很好的套二，拎包入住，相当新   \n",
       "129  锦江  绿地468公馆三期        绿地468公馆三期清水套二，户型方正。   \n",
       "254  锦江     沙河壹号一期  沙河壹号，房东诚心卖，高楼层，采光好，视野开阔！！   \n",
       "255  锦江      嘉和园一期          房东诚心出售，交通便利 配套齐全。   \n",
       "256  锦江     鑫苑名家二期     鑫苑名家套三住宅，居家装修，业主自住保养好。   \n",
       "257  锦江     鑫苑名家一期         鑫苑名家一期，套二带装修，中间楼层，   \n",
       "258  锦江     紫东梵谷二期            紫东丽景套二，户型方正，低楼层   \n",
       "259  锦江       世纪朝阳            九眼桥一环边世纪朝阳对中庭套三   \n",
       "260  锦江       天涯南苑           带屋顶花园 标准套三双卫 带阳台   \n",
       "261  锦江       中粮鸿云       此房是标准套二，户型方正，精装修，未住人   \n",
       "262  锦江        创意山          创意山公寓，单价便宜，交通方便出行   \n",
       "263  锦江       总府花园        总府花园  有电梯  看房需要提前预约   \n",
       "349  锦江     蓝润锦江春天        蓝润锦江春天套三，东北朝向，看房预约。   \n",
       "350  锦江   西部国际金融中心  西部国际高品质小区，开发商统一装修，保养好，采光好   \n",
       "477  锦江       海桐二期       海桐二期居家套一，客厅带阳台，卧室带飘窗   \n",
       "478  锦江      翡翠城四期        翡翠城四期套二双卫，中间楼层，视野好。   \n",
       "479  锦江   锦江城市花园二期   锦江区 三圣乡 锦江城市花园二期，房东诚心出售！   \n",
       "\n",
       "                                             房屋信息              关注   地铁  \\\n",
       "54      低楼层(共18层) | 2010年建 | 2室1厅 | 80.97平米 | 南 北   58人关注 / 3月前发布  近地铁   \n",
       "55       高楼层(共6层) | 2004年建 | 3室2厅 | 124.68平米 | 西北  135人关注 / 5月前发布  NaN   \n",
       "97   低楼层(共16层) | 2009年建 | 4室2厅 | 116.58平米 | 东南 西北   95人关注 / 8月前发布  近地铁   \n",
       "98            低楼层(共6层) | 2002年建 | 2室2厅 | 74平米 | 东   19人关注 / 8月前发布  近地铁   \n",
       "99           高楼层(共7层) | 1988年建 | 2室1厅 | 82平米 | 东南   60人关注 / 1年前发布  NaN   \n",
       "100       低楼层(共6层) | 1998年建 | 2室1厅 | 56.28平米 | 东南   55人关注 / 4月前发布  近地铁   \n",
       "101      低楼层(共18层) | 2015年建 | 2室1厅 | 54.29平米 | 西南    7人关注 / 3月前发布  NaN   \n",
       "102       高楼层(共6层) | 1985年建 | 2室1厅 | 56.76平米 | 西南  123人关注 / 7月前发布  NaN   \n",
       "129         高楼层(共33层) | 2015年建 | 2室1厅 | 77平米 | 东南   78人关注 / 4月前发布  NaN   \n",
       "254       高楼层(共34层) | 2011年建 | 2室1厅 | 72.89平米 | 西  123人关注 / 8月前发布  近地铁   \n",
       "255    中楼层(共6层) | 2002年建 | 2室2厅 | 78.29平米 | 东南 西北   20人关注 / 6月前发布  近地铁   \n",
       "256       中楼层(共40层) | 2012年建 | 3室1厅 | 86.03平米 | 北   24人关注 / 3月前发布  NaN   \n",
       "257         高楼层(共34层) | 2011年建 | 2室1厅 | 79平米 | 东南   48人关注 / 4月前发布  NaN   \n",
       "258       低楼层(共6层) | 2008年建 | 2室2厅 | 83.25平米 | 东南   51人关注 / 1年前发布  NaN   \n",
       "259     高楼层(共26层) | 2005年建 | 3室1厅 | 126.65平米 | 东北   14人关注 / 3月前发布  NaN   \n",
       "260       高楼层(共7层) | 2000年建 | 3室2厅 | 154.13平米 | 东   39人关注 / 3月前发布  NaN   \n",
       "261         高楼层(共40层) | 2017年建 | 2室1厅 | 66平米 | 西南   90人关注 / 8月前发布  NaN   \n",
       "262       低楼层(共22层) | 2017年建 | 2室1厅 | 70.24平米 | 南    9人关注 / 5月前发布  NaN   \n",
       "263      低楼层(共30层) | 2000年建 | 3室1厅 | 98.55平米 | 西南   62人关注 / 9月前发布  近地铁   \n",
       "349      中楼层(共18层) | 2016年建 | 3室2厅 | 71.76平米 | 东北  137人关注 / 1年前发布  NaN   \n",
       "350               高楼层(共47层) 2室1厅 | 82.64平米 | 东 东北   2人关注 / 28天前发布  近地铁   \n",
       "477      中楼层(共18层) | 2010年建 | 1室1厅 | 50.18平米 | 东南   35人关注 / 1年前发布  NaN   \n",
       "478      高楼层(共29层) | 2009年建 | 2室1厅 | 96.57平米 | 东南   12人关注 / 9月前发布  近地铁   \n",
       "479      高楼层(共34层) | 2010年建 | 3室1厅 | 81.82平米 | 东南   20人关注 / 4月前发布  NaN   \n",
       "\n",
       "     单价(元/平米)  \n",
       "54    13832.3  \n",
       "55    19890.9  \n",
       "97    25561.8  \n",
       "98    12567.6  \n",
       "99    11097.6  \n",
       "100   12970.9  \n",
       "101   20261.6  \n",
       "102   13037.4  \n",
       "129   20324.7  \n",
       "254   18521.1  \n",
       "255   12517.6  \n",
       "256   20341.7  \n",
       "257   15569.6  \n",
       "258   13813.8  \n",
       "259   22108.2  \n",
       "260   20437.3  \n",
       "261   31515.2  \n",
       "262   10962.4  \n",
       "263   20801.6  \n",
       "349   18812.7  \n",
       "350   37512.1  \n",
       "477   13949.8  \n",
       "478   21331.7  \n",
       "479   18235.2  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_house_one[new_house_one.duplicated().values == True]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "6d7667d4-cd6e-4a32-ab5e-47c8b457485d",
   "metadata": {},
   "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>区</th>\n",
       "      <th>小区名称</th>\n",
       "      <th>标题</th>\n",
       "      <th>房屋信息</th>\n",
       "      <th>关注</th>\n",
       "      <th>地铁</th>\n",
       "      <th>单价(元/平米)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>锦江</td>\n",
       "      <td>翡翠城四期</td>\n",
       "      <td>翡翠城四期跃层 采光视野好 可看沙河 客厅带有阳台</td>\n",
       "      <td>高楼层(共29层)| 2009年建 |2室1厅 | 85.21平米 | 东南</td>\n",
       "      <td>331人关注/ 5月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>176036.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>锦江</td>\n",
       "      <td>时代豪庭一期</td>\n",
       "      <td>时代豪庭套三 中间楼层 有装修 业主处理资产出售</td>\n",
       "      <td>中楼层(共38层)| 2009年建 |3室1厅 | 155.79平米| 东南</td>\n",
       "      <td>137人关注/ 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>26959.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>锦江</td>\n",
       "      <td>卓锦城六期</td>\n",
       "      <td>卓锦城六期紫郡房源，套三，进门带入户</td>\n",
       "      <td>中楼层(共31层)| 2014年建 |3室1厅 | 89.33平米| 西南</td>\n",
       "      <td>36人关注 / 23天前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22612.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>锦江</td>\n",
       "      <td>星城银座</td>\n",
       "      <td>春熙路太古里标准套一出售，现租给民宿。</td>\n",
       "      <td>高楼层(共11层) | 2003年建 | 1室0厅 | 51.07平米 | 南</td>\n",
       "      <td>29人关注 / 5月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>18014.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>锦江</td>\n",
       "      <td>新莲新苑</td>\n",
       "      <td>新莲新苑优质套三，诚心出售，近沙河，采光视野好。</td>\n",
       "      <td>高楼层(共7层) | 2001年建 | 3室1厅 | 77.7平米 | 东南</td>\n",
       "      <td>14人关注 / 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13513.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>470</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东顺城南街51号</td>\n",
       "      <td>东顺城南街51号院，无抵押。满五唯一没有个税</td>\n",
       "      <td>高楼层(共7层) | 1992年建 | 2室2厅 | 66.1平米 | 南</td>\n",
       "      <td>78人关注 / 1年前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>21028.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>471</th>\n",
       "      <td>锦江</td>\n",
       "      <td>育才都市家园二期</td>\n",
       "      <td>育才套二、有家具家电、房东自住</td>\n",
       "      <td>低楼层(共11层) | 2006年建 | 2室1厅 | 80.74平米 | 东南</td>\n",
       "      <td>31人关注 / 7月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>19816.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>472</th>\n",
       "      <td>锦江</td>\n",
       "      <td>嘉和园二期</td>\n",
       "      <td>多层住宅无电梯，户型结构合理，居家适宜</td>\n",
       "      <td>高楼层(共6层) | 2002年建 | 1室1厅 | 55.42平米 | 东南</td>\n",
       "      <td>13人关注 / 9月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>12630.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>473</th>\n",
       "      <td>锦江</td>\n",
       "      <td>学道街42号</td>\n",
       "      <td>省教育厅单位房 大套三 采光好 适合一家人居住</td>\n",
       "      <td>低楼层(共28层) | 2002年建 | 3室2厅 | 146.77平米 | 西南</td>\n",
       "      <td>33人关注 / 8月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>28616.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>474</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东洪广厦</td>\n",
       "      <td>东洪广厦 3室2厅 东南 西北</td>\n",
       "      <td>中楼层(共32层) | 2013年建 | 3室2厅 | 90.04平米 | 东南 西北</td>\n",
       "      <td>2人关注 / 19天前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16825.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>475 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      区      小区名称                         标题  \\\n",
       "0    锦江     翡翠城四期  翡翠城四期跃层 采光视野好 可看沙河 客厅带有阳台   \n",
       "1    锦江    时代豪庭一期   时代豪庭套三 中间楼层 有装修 业主处理资产出售   \n",
       "2    锦江     卓锦城六期         卓锦城六期紫郡房源，套三，进门带入户   \n",
       "3    锦江      星城银座        春熙路太古里标准套一出售，现租给民宿。   \n",
       "4    锦江      新莲新苑   新莲新苑优质套三，诚心出售，近沙河，采光视野好。   \n",
       "..   ..       ...                        ...   \n",
       "470  锦江  东顺城南街51号     东顺城南街51号院，无抵押。满五唯一没有个税   \n",
       "471  锦江  育才都市家园二期            育才套二、有家具家电、房东自住   \n",
       "472  锦江     嘉和园二期        多层住宅无电梯，户型结构合理，居家适宜   \n",
       "473  锦江    学道街42号    省教育厅单位房 大套三 采光好 适合一家人居住   \n",
       "474  锦江      东洪广厦            东洪广厦 3室2厅 东南 西北   \n",
       "\n",
       "                                            房屋信息              关注   地铁  \\\n",
       "0         高楼层(共29层)| 2009年建 |2室1厅 | 85.21平米 | 东南   331人关注/ 5月前发布  近地铁   \n",
       "1         中楼层(共38层)| 2009年建 |3室1厅 | 155.79平米| 东南   137人关注/ 5月前发布  NaN   \n",
       "2          中楼层(共31层)| 2014年建 |3室1厅 | 89.33平米| 西南  36人关注 / 23天前发布  NaN   \n",
       "3        高楼层(共11层) | 2003年建 | 1室0厅 | 51.07平米 | 南   29人关注 / 5月前发布  近地铁   \n",
       "4         高楼层(共7层) | 2001年建 | 3室1厅 | 77.7平米 | 东南   14人关注 / 5月前发布  NaN   \n",
       "..                                           ...             ...  ...   \n",
       "470        高楼层(共7层) | 1992年建 | 2室2厅 | 66.1平米 | 南   78人关注 / 1年前发布  近地铁   \n",
       "471     低楼层(共11层) | 2006年建 | 2室1厅 | 80.74平米 | 东南   31人关注 / 7月前发布  近地铁   \n",
       "472      高楼层(共6层) | 2002年建 | 1室1厅 | 55.42平米 | 东南   13人关注 / 9月前发布  近地铁   \n",
       "473    低楼层(共28层) | 2002年建 | 3室2厅 | 146.77平米 | 西南   33人关注 / 8月前发布  NaN   \n",
       "474  中楼层(共32层) | 2013年建 | 3室2厅 | 90.04平米 | 东南 西北   2人关注 / 19天前发布  NaN   \n",
       "\n",
       "     单价(元/平米)  \n",
       "0    176036.0  \n",
       "1     26959.4  \n",
       "2     22612.8  \n",
       "3     18014.5  \n",
       "4     13513.5  \n",
       "..        ...  \n",
       "470   21028.7  \n",
       "471   19816.7  \n",
       "472   12630.8  \n",
       "473   28616.2  \n",
       "474   16825.9  \n",
       "\n",
       "[475 rows x 7 columns]"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除重复值，忽略原来的索引并重新设置索引\n",
    "new_house_one = new_house_one.drop_duplicates(ignore_index=True)\n",
    "new_house_one"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4604fd3d-0ee6-4053-99d1-014546a67ac3",
   "metadata": {},
   "source": [
    "### 4.\t检测与处理单价(元/平方米)一列的异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "19bbbdc0-8652-406a-9d71-182fd27b70cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WsvX1dXJ4/EoLi6u3zXYyxVX/0Z1bR7V+etafgcHvoorrg6TlDvwFQEABo1fwk1LS4tycnJ09913a8aMGTp58sy1QL785S9ryZIluuqqq9TW1qb58+drzpw5ioiIUFZWllwul8rKyjR79mwVFxcrOztbwcHB/a7BXloO36Obrm3Qrdf5Yc/NkSMaMWKErriy/3tuduw/oZqDCVL3Rz8BAJcIv4Sbd955R7W1taqtrdXPfvYzq/3AgQPau3evZsyYocjISM2cOVNFRUVnntjpVElJifLy8lRYWKj29nZVVFQMqAZ7aW/6sr4ckaL/k+mHi/id3KqJN08c2EX8Dn+kj5r8c/sGAMDgcRhjTCA7UF9fr6qqKk2aNKnLYM/+1i7E7XYrOjpaLpeLAcWXqMff2Kn1H/1dybFXaPL1/R8ELPn/9gv335Yy4KsmA/APr9erDRs2aPr06Yy5GQJ6+/0d8HtLJSUlKSkpya81XP72HHRJkj5vbNEv/XKzS6c2/bVRUuOA13RNTP8PbQEABl/Aww3QnX+f8SX9n7erNW5ktGIjej4Trjc++OsRHWj0KDU2TLdfP2JA67om5gruCA4AlzjCDS5JX7shUX+64Z/8sq5/+1WzDjR69JXkSA4nAcAQ4Jd7SwEAAFwqCDcAAMBWCDcAAMBWGHODy9bHH3+sFStWXHC+7UckT+QY/d9P1uux939x3nmffPJJjRkzxl9dBAAEAOEGl60VK1bo1Vdf7fX8f5f0517M98orr/S7TwCAwCPc4LL15JNP9mq+o+7TqjnerpuGBysxKtwv6wQAXLoIN7hsjRkzpld7WY4ePaqtW7dq4sSB3X4BAHB5YEAxAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINbK21tVU//elPVVJSop/+9KdqbW0NdJcAAIPssg031dXVysjIUGxsrAoLC2WMCXSXcIlZtGiRrrzySj377LPasGGDnn32WV155ZVatGhRoLsGABhEl2W48Xg8ys3N1YQJE1RVVaWamhqVlpYGulu4hCxatEjPP/+8hg8frhdffFE///nP9eKLL2r48OF6/vnnCTgAYGMOcxnu8li3bp0eeOABHTx4UBEREdq9e7cef/xxvf/++71a3u12Kzo6Wi6XS1FRUYPcW1xsra2tuvLKKzV8+HAdPHhQJ06c0NatWzVx4kTFxcVp5MiROn78uE6dOqXQ0NBAdxfAAHi9Xm3YsEHTp09XSEhIoLuDQdbb72/nReyT3+zevVuZmZmKiIiQJI0bN041NTU9zu/xeOTxeKxpt9st6cxG4fV6B7ez6JcTp1q17qO9OtnW2OM8p5pc2le9q0v7Xz/aKWeSU+lZt+qBH/2/8rS2qrGxUb/a9YHCQkN13dRb5fpTubK+PUPX3zzBZ9n0L92iKyOje3zO0cOv1v9z4/X9f2EABrR9n6ujo0NHGxr01kfbFRR0/oMRbN+Xv95+Z1+W4cbtdis1NdWadjgcCg4OVmNjo2JjY7vMv2zZMi1durRL+6ZNm6yAhEvL1iMO/ca9WWEJfzz/jEndt6XflS6XDmiXDpxpS5UOn13PTtcpHdQuHfRZdFfj21LPn7fy7LxDf6+ZohFX9PaVADjXgLbv7iSftX2fB9v35a+5ublX812W4cbpdCosLMynLTw8XM3Nzd2Gm8WLF6ugoMCadrvdSk5O1rRp0zgsdYnKPNWq1I+SdLItp8d5zrfnZvfW/6sJWVOVdsM4a89NbGyswkJDtb92j/78p3J9eeLX+r7n5hb+sgMGaiDb97k699wkJiQMfM8N2/clr/PIy4VclmNufvjDH6q6ulr/9V//ZbXFxMTok08+UUJCwgWXZ8yNvTHmBhg6GHMztPT2+/uyPFsqIyND27Zts6br6urk8XgUFxcXwF7hUhEaGqqnnnpKR44c0ciRI1VWVqYTJ06orKxMI0eO1JEjR/TUU08RbADApi7Lw1JZWVlyuVwqKyvT7NmzVVxcrOzsbAUHBwe6a7hE/OhHP5IkvfTSSyosLLTanU6nCgsLrToAwH4uy8NS0pnTwfPy8hQZGan29nZVVFRo7NixvVqWw1JDR2trq374wx9q27ZtyszM1NNPP80eG8BGOCw1tNj6VHBJuvvuu/XJJ5+oqqpKkyZN6tVYGww9oaGhmjdvnsaNG6eJEycSbABgCLhsw40kJSUlKSmpt+cKAgCAoeCyHFAMAADQE8INAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwFcINAACwlcv6In791XnHid7eOh2Xt6amJjU3N6upqUnh4eGB7g4AP/J6vWpubpbb7eb2C0NA5/f2he4cNSTDTVNTkyQpOTk5wD0BAAB91dTUpOjo6B7rl+2NMweio6NDhw4dUmRkpBwOR6C7g0G2ZcsW5ebm6ne/+52ysrIC3R0AfuR2u5WcnKzPP/+cGyEPAcYYNTU16ZprrlFQUM8ja4bknpugoCCNHDky0N3ARXLllVdaP/nwA+wpKiqK7XuION8em04MKAYAALZCuAEAALZCuIHtpaSkKCwsTCkpKYHuCgA/CwsL03PPPaewsLBAdwWXkCE5oBgAANgXe24AAICtEG4AAICtEG4wYPfee6/P9PLly/XII4/0OP/IkSOVm5trTe/fv19XX3219u/f36vni4qK0nvvvde/zvbA6/Va/z58+LAOHz583vkPHz6szz77bEDP+d5773HqKi55f/7zn32mDx48qJqamh7nf+ONN7Rjxw5r2uPxqKysTB6Pp1fP9/LLL/v96vFnj77wer0+23t3vF6vWltbB/ScbrdbL7300oDWgQEwwAC8+eabRpK56667rDan02kkmVOnTnWZv7W11UgyKSkpVtvIkSONJPPwww9f8PlGjBhhJJkvvvjCatu3b5/P9Lk++uijC67X4XCYTz/91BhjTFRUlJF0wUdERESX9WzevNn6d15enpFkdu3aZb32s1/jF198YSSZESNGXLB/QCA0NDSYxMREs3XrVqutoKDA3Hzzzaa9vb3L/B0dHSY5Odm8+eabVtsbb7xhJJm//OUvF3y+0tJSc+edd5q2tjar7fTp0z7T52pubr7geh944AHj8XiMMca8/PLLJjo62gwfPtx6OBwOExMTY01HR0eb4uLiLutxuVzWvz/88EOfz7mOjg6f19jW1mbuvPNOU1paesH+wf8INxiwmJgYc8UVVxhjzgQNSeb222/vdt6vfOUrPuGkoaHBSDIOh8NIMg0NDT0+T2eQ+v3vf+/THhQUdMEgcj7Tp083oaGhPm179+71mZZkZs2aZU0vWrSoy3pWr17tE/RKS0t9XlNniFu6dKm1zO9//3sjyaxdu/a8fQQC5Sc/+YkpKioyxpwJGsOHDzfvvfdet/O+8847ZtSoUVYY8Xq95vrrrzdz5841U6ZMMV6vt8fnaWhoMKNHjzYnTpzwaX/kkUdMbGysTxg5+3HVVVedt//btm0zzz77rE9bS0uLz3R0dLT1R4gxxnzyySdd1vP3v//dREdHW0HvyJEjRpL1mt544w0TERFhDhw4YC1z4sQJc/3115vjx4+ft4/wP8IN+i0kJOSCoSIqKspnGUkmJCTEZx0Oh8MYc2bvicPh6BIsOoWGhnZZnz84HA6zadMma7pz79KECRN8+t0Zbv7t3/7NSDJz587tsq7OvVZ79+41GzZssMJNZ4iJjo7uskxUVJQJCwvz++sCBuL73/9+lyARExNjHA6HNb1ixQqfZaZOnWqefvppa/p73/uemTNnjjHGmIcfftjce++9XYJFp2eeeca8/PLLfn8d9957r8+e3Y6ODvOVr3zFZ5s/O9z89a9/NSEhId3u8f3ud79rbrjhBtPS0mIaGxutcHPixAmTnJxsVq5c2WWZl19+2Tz33HN+f104P8bcoN+MMQoLC5M5E5LlcDg0YsQIn+m2tjZr/i996UuSZN0PZNiwYfJ6vaqoqJAkHT16VMYY3XDDDfrnf/7nLs/X2tqqH//4xz5tH374oY4dO3bBvn788cfdtmdlZSk8PFxTp0612kJCQhQaGqqdO3fqT3/6U5dlli9fLkl6/fXXu9Q653/uued82gsKCiRJDQ0NXZb58Y9/3OvxCMDF0traqieeeELHjh3TsWPHlJ2drZdeekkdHR06duyYcnJy1NzcbM2/fv16lZeXKzw8XJL0wgsv6O2337a22VdeeUUdHR3KzMzU9u3buzzfunXrNGvWLJ+25uZmn8+Qnpw+fbrb9oqKCt1yyy0+l+t3OBzKycnRQw89ZN1E+WzFxcWaNGmS9Xl1tueee07Dhg1TbW1tl+cZN26cHn/88S7LzJo1S2vXrr3ga4CfBTJZ4fLWmz03neNSOg/RSDJhYWHWoaQ77rjD/Pd//7cxxpgtW7aYzMxMa71n/2V16NChbg8vXej5z350t0dIktmxY0eX9k8//dRIMk6n05pv1qxZ5u677zaSzDe/+U2f+fft22daW1t92s7ec3O2Q4cOWeN7zu7H+Q7JARfbokWLTHR0tBk1apQZNWqUiYiIMMOHD7emr7zySrNs2TJjzJlDNElJSea2224zzz33nHn00UfNhAkTzPvvv2+OHTtmjDHG7XabP/7xj2bx4sUmOTnZZ29Ka2urGT16dJc+jBkzptfbd3d7hO655x5z8uTJLu0ej8ekpaWZ7373u8aY/91zU1lZaUJCQsyf//xnn/lPnz5tOjo6fNrO3nNzttbWVmt8T6fRo0ef95Ac/I89NxiQC+256VRSUiKHw6GIiAhJ0j333KMtW7boj3/8ox577DFJ0urVq7Vt2za1trZq7969PntT1q1b1+3zb968WVu3btXevXsVFBSkoKAg7d27V+Hh4XI4HNq7d6/27t2rzZs3a8yYMT7L3nLLLYqMjFRGRkaX9aakpCg+Pl7t7e0+7W+//baCgoL05ptv+rSnp6crNDRUDofDekyfPl2SlJCQ4NN+zTXX6Nprr+3ynPx1h0uJw+HQwoULVVdXp7q6OuXm5uqFF16wpr/+9a9b8/7lL39RVlaW7r77bknSQw89pPfee08vvfSSfvvb30qS6urqlJ+fr6KiIv31r3/12Zty7NgxxcfHd+nDjh071NTUpJaWFj3++ON67LHH1NLSon//93/XnDlz1NLSopaWFrlcLmuPUac//OEP+sd//EfrxrlnCw0N1eLFi/XFF1/4tL/22mt66KGHdMstt/i033jjjYqJiVF8fLzi4+MVHR2t2NhYSWf29Ha2Dx8+XMOGDdPs2bN9lh8+fHiv9jDDf4bkXcHhH6YPF7f+4IMPJP3vHbrfeustq9Z5h/Zhw4ZZbecGke52EUvSlClTfPrjdDo1ZswY69BX53rOXZ905pDW3r17fdr279+vkJAQpaSkqLa2tsvdZz/55BMdOnRIkvTZZ5/J7XbrS1/6klpbWxUSEmLNFxwcbIU8SUpMTNSRI0es+tm78zvdfPPN3b5GIBDODfbnM2XKFE2ZMkXFxcWSpK985SuSzpxSnZSUJOl/D/dK6hJEhg0b1u0horMvldDS0qLExESFh4fL6XQqODjYWs+565POBJVz/wjxeDxyOBwKDQ3VnDlz9OCDD/rUf/KTn1ingLe2tqq9vV1XXHGF9u/f7/PH2ne+8x25XC69+eabmjx5sr797W9r7ty5Vr2jo8NnvU1NTT6fbxh87LlBvzmdTuvDwuFwyBijI0eO+Ex396Fzru6Cx7m++tWvStJ5//oxxlh/TV3I6NGjFRsb2+W5b7rpJo0aNUoOh0MJCQnW3hhJ+vWvf6309HRlZWXJ4XBo1KhRViA5O9hMnjxZHR0duu+++yRJ3/ve93T06FHddNNN1jyde7DOfk2ZmZm96jtwMURHR+uXv/yl0tPTlZ6ervXr1+vpp5+2pt9///0Lbm9ut1uJiYnW9NkB4WyRkZFqamo67/iav/zlLxo9enSv+r527VrdddddXT5/fvCDHyghIUHx8fG66qqrrH+73W5NmTJFSUlJSk1NtfbEdO6dOrvfW7Zs0RtvvKGnn35a0pk9zt///vf1u9/9zpqn848rSWpra9OpU6cINxdbgA6H4TLW2tra7fgQh8PR5Zotra2tPmNdIiIifM4M0lmnQT/++OPnPW3b4XCYW2+9tdvasmXLjCTzH//xH9bzdJ6Fda5Tp04ZSebQoUM9Pte5dM6p4D3JysoykkxsbKzPmJupU6caSSY4ONisXr3aZ5lbb721x74CF1tHR0e340O++c1vmp///Odd5j17rMuyZct8zgy65pprrNOga2trzahRo3p83lmzZpl3332329qnn35qnE6nqaurs57nwQcf7Hbe9vZ28y//8i9dxsCdz7mngvekoqLCxMTEmFdeecVnzM0HH3xgoqOjzRNPPGH+/ve/+yzz7rvvmvvvv7/XfYF/sOcGfbZy5cou40i623PTufv3hhtu6PZspbFjx0qSdZz+Qr761a/6XPn0bN///vclSUuWLOm2/sQTT2jatGmSzuwpGjFihK6++upePW9v5OXlKSgoSFu2bFFERIROnDjhU9+0aZMWLlyo9vZ2Pfjggz57bnbs2KF/+qd/8ltfgIGor69XWFiYwsLCFB4ebj3eeustPfzwwz5tISEhuuKKK7o9W+n3v/+9hg8frri4uF4973e+8x394Ac/6La2aNEi5ebmatSoUd3W9+7dq//5n/+RJL355puaOXOmz97Ugfrwww/14IMPKjs7W4sXL9ajjz7qU580aZJ27NihXbt2aeTIkSoqKrJqP/jBD/Sd73zHb31B7xBu0GcFBQXWeJKzH9KZsSXntre2tlqHf9rb22WM0SOPPKKamhqlpqZa673Q5c4rKirkcDh8doV/9tln1viWZcuWWe2dYavzlg4lJSUqLy+Xy+XSwYMHezw1/HzO17+9e/fKGKNvfvObOnXqlKSux91feuklGWM0duxYPfzww5Kk2NhYORwOvfvuu33uDzAYRo4cqfb2dnk8Hp0+fdp63HPPPSopKfFpa2trU0dHh3X45/Tp0+ro6FBNTY0efPBBPfvss9Z6Ozo6umwTZ8vKytJVV12ln/zkJ1Zb5+nomzdv1ssvv2y1BwcH68CBA9YlFF5//XU98cQTam9v15tvvqlvfetbfXrN7e3t5x1jdOTIEX366afavn27Fi1aJKnrmMPrr79e77//vtatW6d//dd/lXRmDM/VV1+t22+/vU/9wcAxoBh+1d09W87+C6rzw+31119XSEiI/va3v1m13txPpqKiQllZWVq3bp1OnTql+++/X9KZPSff+973rPnuuOMO/fa3v1V6errVNmHCBHm9Xi1YsKDLQOHeOPfMirOde/8dSda9pw4cOOBzJkh1dbWkM9cF+eKLL7Rly5Y+9wW42E6ePNnt9ZjOHo/S2tqqtrY2lZSUaO7cuT5nVHk8HrW0tJz3OX7605/qzjvv1KxZs9Te3q6vfe1rampqUnl5uVJSUqz5vva1r+nFF1+0tuPhw4ertLRUxhg9//zzCg4O7tNra2lp6fFaOZJ055136s477/Rp65zf4/HI6fzfr9LOa3Q1Njbql7/8pTZt2tSnvsA/HObc+Alc4lwul/WhNnPmTD322GM+p41fTs5+LQDO7EXpDCdVVVUaPXr0ZbuNnP1acHERbgAAgK0w5gYAANgK4QYAANgK4QYAANgK4QYAANgK4QYAANgK4QYAANgK4QYAANgK4QYAANgK4QYAANjK/w/k6ErWWGJibAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "estate = new_house_one[new_house_one['小区名称'].values == '翡翠城四期']\n",
    "estate.boxplot(column='单价(元/平方米)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "8ccab8b6-e7cc-4db9-8a14-20f843612ee3",
   "metadata": {},
   "outputs": [],
   "source": [
    "def box_outliers(ser):\n",
    "    # 对需要检测的数据集进行排序\n",
    "    new_ser = ser.sort_values()\n",
    "    # 判断数据的总数量是奇数还是偶数\n",
    "    if new_ser.count() % 2 == 0:\n",
    "        # 分别计算Q3、Q1、IQR\n",
    "        Q3 = new_ser[int(len(new_ser) / 2):].median()\n",
    "        Q1 = new_ser[:int(len(new_ser) / 2)].median()\n",
    "    elif new_ser.count() % 2 != 0:\n",
    "        Q3 = new_ser[int((len(new_ser)-1) / 2):].median()\n",
    "        Q1 = new_ser[:int((len(new_ser)-1) / 2)].median()\n",
    "    IQR = round(Q3 - Q1, 1)\n",
    "    rule = (round(Q3+1.5 * IQR, 1)<ser) | (round(Q1-1.5 * IQR, 1) > ser)\n",
    "    index = np.arange(ser.shape[0])[rule]\n",
    "    # 获取包含异常值的数据\n",
    "    outliers = ser.iloc[index]\n",
    "    return outliers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "b7053412-ed2c-4c5d-960c-1766dfd348f0",
   "metadata": {},
   "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>区</th>\n",
       "      <th>小区名称</th>\n",
       "      <th>标题</th>\n",
       "      <th>房屋信息</th>\n",
       "      <th>关注</th>\n",
       "      <th>地铁</th>\n",
       "      <th>单价(元/平米)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>312</th>\n",
       "      <td>锦江</td>\n",
       "      <td>锦江城市花园三期</td>\n",
       "      <td>锦江城市花园三期   套二户型诚心出售</td>\n",
       "      <td>低楼层(共34层) | 2011年建 | 2室1厅 | 58.28平米 | 西</td>\n",
       "      <td>10人关注 / 6月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16815.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>394</th>\n",
       "      <td>锦江</td>\n",
       "      <td>锦江城市花园三期</td>\n",
       "      <td>房子精装，保养的很好，带家具家电，房主诚心出售</td>\n",
       "      <td>高楼层(共34层) | 2011年建 | 3室2厅 | 80.76平米 | 东北</td>\n",
       "      <td>4人关注 / 2月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18945.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>356</th>\n",
       "      <td>锦江</td>\n",
       "      <td>沙河壹号二期</td>\n",
       "      <td>锦江区 双公园 沙河壹号三房双卫房型 居家精装</td>\n",
       "      <td>中楼层(共32层) | 2013年建 | 3室2厅 | 91.1平米 | 东南</td>\n",
       "      <td>49人关注 / 4月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>23051.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>373</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东湖国际</td>\n",
       "      <td>东湖国际跃层带花园，装修保养好，直接入住，满五年！</td>\n",
       "      <td>高楼层(共33层) | 2012年建 | 4室2厅 | 142.01平米 | 东南</td>\n",
       "      <td>14人关注 / 7月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39433.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>锦江</td>\n",
       "      <td>恒大都汇华庭</td>\n",
       "      <td>市中 心 太古里 都汇华庭 精装套四 顶跃 诚心出售</td>\n",
       "      <td>高楼层(共50层) | 2015年建 | 4室2厅 | 201.56平米 | 西北</td>\n",
       "      <td>26人关注 / 8月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>39690.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>锦江</td>\n",
       "      <td>华都美林湾</td>\n",
       "      <td>华都美林湾套二  对中庭  可看湖</td>\n",
       "      <td>高楼层(共33层) | 2010年建 | 2室1厅 | 90平米 | 西南</td>\n",
       "      <td>78人关注 / 7月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16444.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>锦江</td>\n",
       "      <td>翡翠城四期</td>\n",
       "      <td>翡翠城四期跃层 采光视野好 可看沙河 客厅带有阳台</td>\n",
       "      <td>高楼层(共29层)| 2009年建 |2室1厅 | 85.21平米 | 东南</td>\n",
       "      <td>331人关注/ 5月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>176036.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      区      小区名称                          标题  \\\n",
       "312  锦江  锦江城市花园三期         锦江城市花园三期   套二户型诚心出售   \n",
       "394  锦江  锦江城市花园三期     房子精装，保养的很好，带家具家电，房主诚心出售   \n",
       "356  锦江    沙河壹号二期     锦江区 双公园 沙河壹号三房双卫房型 居家精装   \n",
       "373  锦江      东湖国际   东湖国际跃层带花园，装修保养好，直接入住，满五年！   \n",
       "11   锦江    恒大都汇华庭  市中 心 太古里 都汇华庭 精装套四 顶跃 诚心出售   \n",
       "36   锦江     华都美林湾           华都美林湾套二  对中庭  可看湖   \n",
       "0    锦江     翡翠城四期   翡翠城四期跃层 采光视野好 可看沙河 客厅带有阳台   \n",
       "\n",
       "                                          房屋信息             关注   地铁  单价(元/平米)  \n",
       "312    低楼层(共34层) | 2011年建 | 2室1厅 | 58.28平米 | 西  10人关注 / 6月前发布  NaN   16815.4  \n",
       "394   高楼层(共34层) | 2011年建 | 3室2厅 | 80.76平米 | 东北   4人关注 / 2月前发布  NaN   18945.0  \n",
       "356    中楼层(共32层) | 2013年建 | 3室2厅 | 91.1平米 | 东南  49人关注 / 4月前发布  NaN   23051.6  \n",
       "373  高楼层(共33层) | 2012年建 | 4室2厅 | 142.01平米 | 东南  14人关注 / 7月前发布  NaN   39433.8  \n",
       "11   高楼层(共50层) | 2015年建 | 4室2厅 | 201.56平米 | 西北  26人关注 / 8月前发布  近地铁   39690.4  \n",
       "36       高楼层(共33层) | 2010年建 | 2室1厅 | 90平米 | 西南  78人关注 / 7月前发布  NaN   16444.4  \n",
       "0       高楼层(共29层)| 2009年建 |2室1厅 | 85.21平米 | 东南  331人关注/ 5月前发布  近地铁  176036.0  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义一个列表，用于保存异常值所在的索引\n",
    "outliers_index_list = []\n",
    "for i in set(new_house_one['小区名称']):\n",
    "    estate = new_house_one[new_house_one['小区名称'].values == i]\n",
    "    outliers_index = box_outliers(estate['单价(元/平方米)'])\n",
    "    if len(outliers_index) != 0:\n",
    "        # 将异常值的索引添加到列表中\n",
    "        outliers_index_list.append(outliers_index.index.tolist())\n",
    "# 将utliers_index_list由嵌套列表转换为单个列表\n",
    "outliers_index_single_li = sum(outliers_index_list, [])\n",
    "new_house_one.loc[[i for i in outliers_index_single_li]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "4eaf5b79-e638-4836-b03e-fb231a1a4bcf",
   "metadata": {},
   "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>区</th>\n",
       "      <th>小区名称</th>\n",
       "      <th>标题</th>\n",
       "      <th>房屋信息</th>\n",
       "      <th>关注</th>\n",
       "      <th>地铁</th>\n",
       "      <th>单价(元/平米)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>锦江</td>\n",
       "      <td>时代豪庭一期</td>\n",
       "      <td>时代豪庭套三 中间楼层 有装修 业主处理资产出售</td>\n",
       "      <td>中楼层(共38层)| 2009年建 |3室1厅 | 155.79平米| 东南</td>\n",
       "      <td>137人关注/ 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>26959.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>锦江</td>\n",
       "      <td>卓锦城六期</td>\n",
       "      <td>卓锦城六期紫郡房源，套三，进门带入户</td>\n",
       "      <td>中楼层(共31层)| 2014年建 |3室1厅 | 89.33平米| 西南</td>\n",
       "      <td>36人关注 / 23天前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22612.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>锦江</td>\n",
       "      <td>星城银座</td>\n",
       "      <td>春熙路太古里标准套一出售，现租给民宿。</td>\n",
       "      <td>高楼层(共11层) | 2003年建 | 1室0厅 | 51.07平米 | 南</td>\n",
       "      <td>29人关注 / 5月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>18014.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>锦江</td>\n",
       "      <td>新莲新苑</td>\n",
       "      <td>新莲新苑优质套三，诚心出售，近沙河，采光视野好。</td>\n",
       "      <td>高楼层(共7层) | 2001年建 | 3室1厅 | 77.7平米 | 东南</td>\n",
       "      <td>14人关注 / 5月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13513.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>锦江</td>\n",
       "      <td>俊发星雅俊园</td>\n",
       "      <td>星雅俊园优质平层公寓，业主精装修，套二带家具家电</td>\n",
       "      <td>低楼层(共37层) | 2015年建 | 2室1厅 | 59平米 | 西南</td>\n",
       "      <td>80人关注 / 4月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13220.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>470</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东顺城南街51号</td>\n",
       "      <td>东顺城南街51号院，无抵押。满五唯一没有个税</td>\n",
       "      <td>高楼层(共7层) | 1992年建 | 2室2厅 | 66.1平米 | 南</td>\n",
       "      <td>78人关注 / 1年前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>21028.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>471</th>\n",
       "      <td>锦江</td>\n",
       "      <td>育才都市家园二期</td>\n",
       "      <td>育才套二、有家具家电、房东自住</td>\n",
       "      <td>低楼层(共11层) | 2006年建 | 2室1厅 | 80.74平米 | 东南</td>\n",
       "      <td>31人关注 / 7月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>19816.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>472</th>\n",
       "      <td>锦江</td>\n",
       "      <td>嘉和园二期</td>\n",
       "      <td>多层住宅无电梯，户型结构合理，居家适宜</td>\n",
       "      <td>高楼层(共6层) | 2002年建 | 1室1厅 | 55.42平米 | 东南</td>\n",
       "      <td>13人关注 / 9月前发布</td>\n",
       "      <td>近地铁</td>\n",
       "      <td>12630.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>473</th>\n",
       "      <td>锦江</td>\n",
       "      <td>学道街42号</td>\n",
       "      <td>省教育厅单位房 大套三 采光好 适合一家人居住</td>\n",
       "      <td>低楼层(共28层) | 2002年建 | 3室2厅 | 146.77平米 | 西南</td>\n",
       "      <td>33人关注 / 8月前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>28616.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>474</th>\n",
       "      <td>锦江</td>\n",
       "      <td>东洪广厦</td>\n",
       "      <td>东洪广厦 3室2厅 东南 西北</td>\n",
       "      <td>中楼层(共32层) | 2013年建 | 3室2厅 | 90.04平米 | 东南 西北</td>\n",
       "      <td>2人关注 / 19天前发布</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16825.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>474 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      区      小区名称                        标题  \\\n",
       "1    锦江    时代豪庭一期  时代豪庭套三 中间楼层 有装修 业主处理资产出售   \n",
       "2    锦江     卓锦城六期        卓锦城六期紫郡房源，套三，进门带入户   \n",
       "3    锦江      星城银座       春熙路太古里标准套一出售，现租给民宿。   \n",
       "4    锦江      新莲新苑  新莲新苑优质套三，诚心出售，近沙河，采光视野好。   \n",
       "5    锦江    俊发星雅俊园  星雅俊园优质平层公寓，业主精装修，套二带家具家电   \n",
       "..   ..       ...                       ...   \n",
       "470  锦江  东顺城南街51号    东顺城南街51号院，无抵押。满五唯一没有个税   \n",
       "471  锦江  育才都市家园二期           育才套二、有家具家电、房东自住   \n",
       "472  锦江     嘉和园二期       多层住宅无电梯，户型结构合理，居家适宜   \n",
       "473  锦江    学道街42号   省教育厅单位房 大套三 采光好 适合一家人居住   \n",
       "474  锦江      东洪广厦           东洪广厦 3室2厅 东南 西北   \n",
       "\n",
       "                                            房屋信息              关注   地铁  \\\n",
       "1         中楼层(共38层)| 2009年建 |3室1厅 | 155.79平米| 东南   137人关注/ 5月前发布  NaN   \n",
       "2          中楼层(共31层)| 2014年建 |3室1厅 | 89.33平米| 西南  36人关注 / 23天前发布  NaN   \n",
       "3        高楼层(共11层) | 2003年建 | 1室0厅 | 51.07平米 | 南   29人关注 / 5月前发布  近地铁   \n",
       "4         高楼层(共7层) | 2001年建 | 3室1厅 | 77.7平米 | 东南   14人关注 / 5月前发布  NaN   \n",
       "5          低楼层(共37层) | 2015年建 | 2室1厅 | 59平米 | 西南   80人关注 / 4月前发布  NaN   \n",
       "..                                           ...             ...  ...   \n",
       "470        高楼层(共7层) | 1992年建 | 2室2厅 | 66.1平米 | 南   78人关注 / 1年前发布  近地铁   \n",
       "471     低楼层(共11层) | 2006年建 | 2室1厅 | 80.74平米 | 东南   31人关注 / 7月前发布  近地铁   \n",
       "472      高楼层(共6层) | 2002年建 | 1室1厅 | 55.42平米 | 东南   13人关注 / 9月前发布  近地铁   \n",
       "473    低楼层(共28层) | 2002年建 | 3室2厅 | 146.77平米 | 西南   33人关注 / 8月前发布  NaN   \n",
       "474  中楼层(共32层) | 2013年建 | 3室2厅 | 90.04平米 | 东南 西北   2人关注 / 19天前发布  NaN   \n",
       "\n",
       "     单价(元/平米)  \n",
       "1     26959.4  \n",
       "2     22612.8  \n",
       "3     18014.5  \n",
       "4     13513.5  \n",
       "5     13220.3  \n",
       "..        ...  \n",
       "470   21028.7  \n",
       "471   19816.7  \n",
       "472   12630.8  \n",
       "473   28616.2  \n",
       "474   16825.9  \n",
       "\n",
       "[474 rows x 7 columns]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除指定的一行数据\n",
    "new_house_one.drop(0)"
   ]
  },
 }