{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pandas包介绍\n",
"\n",
"[Pandas官方文档(英文)](https://pandas.pydata.org/pandas-docs/stable/)\n",
"\n",
"[Pandas文档(中文)](https://pypandas.cn/docs/)\n",
"\n",
"Pandas是一个开源数据分析和数据处理的Python库。它提供了大量便捷的数据结构和数据分析工具,是Python编程语言中用于数据挖掘和数据分析的重要工具之一。\n",
"\n",
"## DataFrame\n",
"\n",
"DataFrame是pandas库中的一种二维标签化数据结构,类似于Excel 的表格或SQL数据库中的表。它是数据分析和处理的基础单元,能够存储多种类型的数据,并提供丰富的函数和方法进行数据操作。\n",
"\n",
"\n",
"\n",
"DataFrame的每一列则是一个Series,同样提供了丰富的函数和方法进行数据操作\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Name Age Sex\n",
"0 Braund, Mr. Owen Harris 22 male\n",
"1 Allen, Mr. William Henry 35 male\n",
"2 Bonnell, Miss. Elizabeth 58 female\n",
"\n",
"0 22\n",
"1 35\n",
"2 58\n",
"Name: Age, dtype: int64\n",
"\n",
"58\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.DataFrame(\n",
" {\n",
" \"Name\": [\n",
" \"Braund, Mr. Owen Harris\",\n",
" \"Allen, Mr. William Henry\",\n",
" \"Bonnell, Miss. Elizabeth\",\n",
" ],\n",
" \"Age\": [22, 35, 58],\n",
" \"Sex\": [\"male\", \"male\", \"female\"],\n",
" }\n",
")\n",
"\n",
"print(df)\n",
"print()\n",
"print(df[\"Age\"])\n",
"print()\n",
"print(df[\"Age\"].max())"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Age | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 3.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 38.333333 | \n",
"
\n",
" \n",
" std | \n",
" 18.230012 | \n",
"
\n",
" \n",
" min | \n",
" 22.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 28.500000 | \n",
"
\n",
" \n",
" 50% | \n",
" 35.000000 | \n",
"
\n",
" \n",
" 75% | \n",
" 46.500000 | \n",
"
\n",
" \n",
" max | \n",
" 58.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Age\n",
"count 3.000000\n",
"mean 38.333333\n",
"std 18.230012\n",
"min 22.000000\n",
"25% 28.500000\n",
"50% 35.000000\n",
"75% 46.500000\n",
"max 58.000000"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.DataFrame(\n",
" {\n",
" \"Name\": [\n",
" \"Braund, Mr. Owen Harris\",\n",
" \"Allen, Mr. William Henry\",\n",
" \"Bonnell, Miss. Elizabeth\",\n",
" ],\n",
" \"Age\": [22, 35, 58],\n",
" \"Sex\": [\"male\", \"male\", \"female\"],\n",
" }\n",
")\n",
"\n",
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 读取文件\n",
"pandas库提供了丰富的函数和方法用于读取各种类型的数据文件,如CSV、Excel、JSON、SQL数据库等。这些函数通常返回一个 DataFrame 对象,方便进行后续的数据分析和处理。"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" sepal_length | \n",
" sepal_width | \n",
" petal_length | \n",
" petal_width | \n",
" species | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 5.1 | \n",
" 3.5 | \n",
" 1.4 | \n",
" 0.2 | \n",
" setosa | \n",
"
\n",
" \n",
" 1 | \n",
" 4.9 | \n",
" 3.0 | \n",
" 1.4 | \n",
" 0.2 | \n",
" setosa | \n",
"
\n",
" \n",
" 2 | \n",
" 4.7 | \n",
" 3.2 | \n",
" 1.3 | \n",
" 0.2 | \n",
" setosa | \n",
"
\n",
" \n",
" 3 | \n",
" 4.6 | \n",
" 3.1 | \n",
" 1.5 | \n",
" 0.2 | \n",
" setosa | \n",
"
\n",
" \n",
" 4 | \n",
" 5.0 | \n",
" 3.6 | \n",
" 1.4 | \n",
" 0.2 | \n",
" setosa | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sepal_length sepal_width petal_length petal_width species\n",
"0 5.1 3.5 1.4 0.2 setosa\n",
"1 4.9 3.0 1.4 0.2 setosa\n",
"2 4.7 3.2 1.3 0.2 setosa\n",
"3 4.6 3.1 1.5 0.2 setosa\n",
"4 5.0 3.6 1.4 0.2 setosa"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"df = pd.read_csv(\"iris.csv\")\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"sepal_length float64\n",
"sepal_width float64\n",
"petal_length float64\n",
"petal_width float64\n",
"species object\n",
"dtype: object"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"df = pd.read_csv(\"iris.csv\")\n",
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" sepal_length | \n",
" sepal_width | \n",
" petal_length | \n",
" petal_width | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 150.000000 | \n",
" 150.000000 | \n",
" 150.000000 | \n",
" 150.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 5.843333 | \n",
" 3.054000 | \n",
" 3.758667 | \n",
" 1.198667 | \n",
"
\n",
" \n",
" std | \n",
" 0.828066 | \n",
" 0.433594 | \n",
" 1.764420 | \n",
" 0.763161 | \n",
"
\n",
" \n",
" min | \n",
" 4.300000 | \n",
" 2.000000 | \n",
" 1.000000 | \n",
" 0.100000 | \n",
"
\n",
" \n",
" 25% | \n",
" 5.100000 | \n",
" 2.800000 | \n",
" 1.600000 | \n",
" 0.300000 | \n",
"
\n",
" \n",
" 50% | \n",
" 5.800000 | \n",
" 3.000000 | \n",
" 4.350000 | \n",
" 1.300000 | \n",
"
\n",
" \n",
" 75% | \n",
" 6.400000 | \n",
" 3.300000 | \n",
" 5.100000 | \n",
" 1.800000 | \n",
"
\n",
" \n",
" max | \n",
" 7.900000 | \n",
" 4.400000 | \n",
" 6.900000 | \n",
" 2.500000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sepal_length sepal_width petal_length petal_width\n",
"count 150.000000 150.000000 150.000000 150.000000\n",
"mean 5.843333 3.054000 3.758667 1.198667\n",
"std 0.828066 0.433594 1.764420 0.763161\n",
"min 4.300000 2.000000 1.000000 0.100000\n",
"25% 5.100000 2.800000 1.600000 0.300000\n",
"50% 5.800000 3.000000 4.350000 1.300000\n",
"75% 6.400000 3.300000 5.100000 1.800000\n",
"max 7.900000 4.400000 6.900000 2.500000"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"df = pd.read_csv(\"iris.csv\")\n",
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 选取子集\n",
"\n",
"我们将以泰坦尼克号数据集为例,展示如何选取DataFrame中的子集。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" Braund, Mr. Owen Harris | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1 | \n",
" 3 | \n",
" Heikkinen, Miss. Laina | \n",
" female | \n",
" 26.0 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
" female | \n",
" 35.0 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" Allen, Mr. William Henry | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"比如,我对于乘客们的年龄感兴趣,我们可以通过下面的方式提取出年龄这一列"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 22.0\n",
"1 38.0\n",
"2 26.0\n",
"3 35.0\n",
"4 35.0\n",
"Name: Age, dtype: float64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"ages = titanic[\"Age\"] #选择年龄列\n",
"ages.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果我们对其中两列感兴趣,我们可以这样操作"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Age | \n",
" Sex | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 22.0 | \n",
" male | \n",
"
\n",
" \n",
" 1 | \n",
" 38.0 | \n",
" female | \n",
"
\n",
" \n",
" 2 | \n",
" 26.0 | \n",
" female | \n",
"
\n",
" \n",
" 3 | \n",
" 35.0 | \n",
" female | \n",
"
\n",
" \n",
" 4 | \n",
" 35.0 | \n",
" male | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Age Sex\n",
"0 22.0 male\n",
"1 38.0 female\n",
"2 26.0 female\n",
"3 35.0 female\n",
"4 35.0 male"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"age_sex = titanic[[\"Age\", \"Sex\"]] #选择年龄和性别两列\n",
"age_sex.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果我们想筛选出,乘客中的所有男性的数据,也就是筛选出表中的某些行,我们可以这样操作"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" Braund, Mr. Owen Harris | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" Allen, Mr. William Henry | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 5 | \n",
" 6 | \n",
" 0 | \n",
" 3 | \n",
" Moran, Mr. James | \n",
" male | \n",
" NaN | \n",
" 0 | \n",
" 0 | \n",
" 330877 | \n",
" 8.4583 | \n",
" NaN | \n",
" Q | \n",
"
\n",
" \n",
" 6 | \n",
" 7 | \n",
" 0 | \n",
" 1 | \n",
" McCarthy, Mr. Timothy J | \n",
" male | \n",
" 54.0 | \n",
" 0 | \n",
" 0 | \n",
" 17463 | \n",
" 51.8625 | \n",
" E46 | \n",
" S | \n",
"
\n",
" \n",
" 7 | \n",
" 8 | \n",
" 0 | \n",
" 3 | \n",
" Palsson, Master. Gosta Leonard | \n",
" male | \n",
" 2.0 | \n",
" 3 | \n",
" 1 | \n",
" 349909 | \n",
" 21.0750 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass Name Sex Age \\\n",
"0 1 0 3 Braund, Mr. Owen Harris male 22.0 \n",
"4 5 0 3 Allen, Mr. William Henry male 35.0 \n",
"5 6 0 3 Moran, Mr. James male NaN \n",
"6 7 0 1 McCarthy, Mr. Timothy J male 54.0 \n",
"7 8 0 3 Palsson, Master. Gosta Leonard male 2.0 \n",
"\n",
" SibSp Parch Ticket Fare Cabin Embarked \n",
"0 1 0 A/5 21171 7.2500 NaN S \n",
"4 0 0 373450 8.0500 NaN S \n",
"5 0 0 330877 8.4583 NaN Q \n",
"6 0 0 17463 51.8625 E46 S \n",
"7 3 1 349909 21.0750 NaN S "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"male_all = titanic[titanic[\"Sex\"] == 'male']\n",
"male_all.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"同理,我们可以筛选出所有年龄大于35岁的客人"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
"
\n",
" \n",
" 6 | \n",
" 7 | \n",
" 0 | \n",
" 1 | \n",
" McCarthy, Mr. Timothy J | \n",
" male | \n",
" 54.0 | \n",
" 0 | \n",
" 0 | \n",
" 17463 | \n",
" 51.8625 | \n",
" E46 | \n",
" S | \n",
"
\n",
" \n",
" 11 | \n",
" 12 | \n",
" 1 | \n",
" 1 | \n",
" Bonnell, Miss. Elizabeth | \n",
" female | \n",
" 58.0 | \n",
" 0 | \n",
" 0 | \n",
" 113783 | \n",
" 26.5500 | \n",
" C103 | \n",
" S | \n",
"
\n",
" \n",
" 13 | \n",
" 14 | \n",
" 0 | \n",
" 3 | \n",
" Andersson, Mr. Anders Johan | \n",
" male | \n",
" 39.0 | \n",
" 1 | \n",
" 5 | \n",
" 347082 | \n",
" 31.2750 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 15 | \n",
" 16 | \n",
" 1 | \n",
" 2 | \n",
" Hewlett, Mrs. (Mary D Kingcome) | \n",
" female | \n",
" 55.0 | \n",
" 0 | \n",
" 0 | \n",
" 248706 | \n",
" 16.0000 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"1 2 1 1 \n",
"6 7 0 1 \n",
"11 12 1 1 \n",
"13 14 0 3 \n",
"15 16 1 2 \n",
"\n",
" Name Sex Age SibSp \\\n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"6 McCarthy, Mr. Timothy J male 54.0 0 \n",
"11 Bonnell, Miss. Elizabeth female 58.0 0 \n",
"13 Andersson, Mr. Anders Johan male 39.0 1 \n",
"15 Hewlett, Mrs. (Mary D Kingcome) female 55.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"1 0 PC 17599 71.2833 C85 C \n",
"6 0 17463 51.8625 E46 S \n",
"11 0 113783 26.5500 C103 S \n",
"13 5 347082 31.2750 NaN S \n",
"15 0 248706 16.0000 NaN S "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"above_35 = titanic[titanic[\"Age\"] > 35]\n",
"above_35.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们尝试拆分这个过程"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 False\n",
"1 True\n",
"2 False\n",
"3 False\n",
"4 False\n",
" ... \n",
"886 False\n",
"887 False\n",
"888 False\n",
"889 False\n",
"890 False\n",
"Name: Age, Length: 891, dtype: bool"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic[\"Age\"] > 35"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以看到,`titanic[\"Age\"] > 35`实际上生成了一个元素类型为bool的Series,而这个Series可以做为索引,True所对应的行将会被选择。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果我们想要,选取特定行以及特定列的数据,我们需要用到`loc`方法"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 Cumings, Mrs. John Bradley (Florence Briggs Th...\n",
"6 McCarthy, Mr. Timothy J\n",
"11 Bonnell, Miss. Elizabeth\n",
"13 Andersson, Mr. Anders Johan\n",
"15 Hewlett, Mrs. (Mary D Kingcome) \n",
"Name: Name, dtype: object"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"adult_names = titanic.loc[titanic[\"Age\"] > 35, \"Name\"]\n",
"adult_names.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以通过数值来筛选,这需要用到`iloc`方法"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
"
\n",
" \n",
" \n",
" \n",
" 9 | \n",
" 2 | \n",
" Nasser, Mrs. Nicholas (Adele Achem) | \n",
" female | \n",
"
\n",
" \n",
" 10 | \n",
" 3 | \n",
" Sandstrom, Miss. Marguerite Rut | \n",
" female | \n",
"
\n",
" \n",
" 11 | \n",
" 1 | \n",
" Bonnell, Miss. Elizabeth | \n",
" female | \n",
"
\n",
" \n",
" 12 | \n",
" 3 | \n",
" Saundercock, Mr. William Henry | \n",
" male | \n",
"
\n",
" \n",
" 13 | \n",
" 3 | \n",
" Andersson, Mr. Anders Johan | \n",
" male | \n",
"
\n",
" \n",
" 14 | \n",
" 3 | \n",
" Vestrom, Miss. Hulda Amanda Adolfina | \n",
" female | \n",
"
\n",
" \n",
" 15 | \n",
" 2 | \n",
" Hewlett, Mrs. (Mary D Kingcome) | \n",
" female | \n",
"
\n",
" \n",
" 16 | \n",
" 3 | \n",
" Rice, Master. Eugene | \n",
" male | \n",
"
\n",
" \n",
" 17 | \n",
" 2 | \n",
" Williams, Mr. Charles Eugene | \n",
" male | \n",
"
\n",
" \n",
" 18 | \n",
" 3 | \n",
" Vander Planke, Mrs. Julius (Emelia Maria Vande... | \n",
" female | \n",
"
\n",
" \n",
" 19 | \n",
" 3 | \n",
" Masselmani, Mrs. Fatima | \n",
" female | \n",
"
\n",
" \n",
" 20 | \n",
" 2 | \n",
" Fynney, Mr. Joseph J | \n",
" male | \n",
"
\n",
" \n",
" 21 | \n",
" 2 | \n",
" Beesley, Mr. Lawrence | \n",
" male | \n",
"
\n",
" \n",
" 22 | \n",
" 3 | \n",
" McGowan, Miss. Anna \"Annie\" | \n",
" female | \n",
"
\n",
" \n",
" 23 | \n",
" 1 | \n",
" Sloper, Mr. William Thompson | \n",
" male | \n",
"
\n",
" \n",
" 24 | \n",
" 3 | \n",
" Palsson, Miss. Torborg Danira | \n",
" female | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pclass Name Sex\n",
"9 2 Nasser, Mrs. Nicholas (Adele Achem) female\n",
"10 3 Sandstrom, Miss. Marguerite Rut female\n",
"11 1 Bonnell, Miss. Elizabeth female\n",
"12 3 Saundercock, Mr. William Henry male\n",
"13 3 Andersson, Mr. Anders Johan male\n",
"14 3 Vestrom, Miss. Hulda Amanda Adolfina female\n",
"15 2 Hewlett, Mrs. (Mary D Kingcome) female\n",
"16 3 Rice, Master. Eugene male\n",
"17 2 Williams, Mr. Charles Eugene male\n",
"18 3 Vander Planke, Mrs. Julius (Emelia Maria Vande... female\n",
"19 3 Masselmani, Mrs. Fatima female\n",
"20 2 Fynney, Mr. Joseph J male\n",
"21 2 Beesley, Mr. Lawrence male\n",
"22 3 McGowan, Miss. Anna \"Annie\" female\n",
"23 1 Sloper, Mr. William Thompson male\n",
"24 3 Palsson, Miss. Torborg Danira female"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic.iloc[9:25, 2:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`iloc`和`loc`这也可以用于修改其中的元素"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" anonymous | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" anonymous | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1 | \n",
" 3 | \n",
" anonymous | \n",
" female | \n",
" 26.0 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
" female | \n",
" 35.0 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" Allen, Mr. William Henry | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp Parch \\\n",
"0 anonymous male 22.0 1 0 \n",
"1 anonymous female 38.0 1 0 \n",
"2 anonymous female 26.0 0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 \n",
"4 Allen, Mr. William Henry male 35.0 0 0 \n",
"\n",
" Ticket Fare Cabin Embarked \n",
"0 A/5 21171 7.2500 NaN S \n",
"1 PC 17599 71.2833 C85 C \n",
"2 STON/O2. 3101282 7.9250 NaN S \n",
"3 113803 53.1000 C123 S \n",
"4 373450 8.0500 NaN S "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic.iloc[0:3, 3] = \"anonymous\"\n",
"titanic.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 绘图\n",
"\n",
"pandas提供了更加方便的方式用于绘制各种图形,比如我们想知道乘客年龄的分布"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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dpkuu+wyf9UCAADgdz6FnY6ODq1atUoVFRU6fvy43G631/4tW7b4pTgAAIDO8insFBYWatWqVcrLy9OgQYPkcDj8XRcAAIBf+BR21qxZo5dfflljxozxdz0AAAB+5dOl55GRkbr00kv9XQsAAIDf+RR27rvvPj3xxBPiGaIAACDY+fQz1ttvv62tW7fqtdde05VXXqmIiAiv/evWrfNLcQAAAJ3lU9iJj4/X7bff7u9aAAAA/M6nsFNeXu7vOgAAALqET2t2JOmLL77QG2+8oV//+tc6deqUJOnYsWNqbm72W3EAAACd5dPMzpEjR3TLLbfo6NGjamtr0z//8z8rNjZWixcvVltbm8rKyvxdJwAAgE98mtkpLCzU8OHD9dlnnykmJsbTfvvtt6uiosJvxQEAAHSWTzM7//u//6t33nlHkZGRXu0ZGRn69NNP/VIYAACAP/g0s+N2u9XR0XFW+yeffKLY2NhOFwUAAOAvPoWd733ve1q6dKnntcPhUHNzsx566CEeIQEAAIKKTz9jPf744xo9erQGDhyo1tZW/fCHP9SBAwfUp08fvfTSS/6uEQAAwGc+hZ2+fftqz549WrNmjfbu3avm5mZNnz5d+fn5XguWAQAAAs2nsCNJ4eHhmjRpkj9rAQAA8Dufws7q1au/dv+dd97pUzEAAAD+5lPYKSws9Hrd3t6uzz//XJGRkerevTthBwAABA2frsb67LPPvLbm5mbV1NRo5MiRLFAGAABBxednY31VVlaWFi1adNasDwAAQCD5LexIZxYtHzt2zJ9dAgAAdIpPa3ZeeeUVr9fGGNXV1elXv/qVRowY4ZfCAAAA/MGnsDNu3Div1w6HQ9/5znd088036/HHH/dHXQAAAH7hU9hxu93+rgMAAKBL+HXNDgAAQLDxaWanqKjoGx9bWlrqy58AAADwC5/Czq5du7Rr1y61t7fr8ssvlyTt379f3bp109ChQz3HORwO/1QJAADgI5/Czm233abY2Fg999xz6tWrl6QzNxqcOnWqbrzxRt13331+LRIAAMBXPq3Zefzxx1VSUuIJOpLUq1cvPfLII1yNBQAAgopPYcflcunEiRNntZ84cUKnTp3qdFEAAAD+4lPYuf322zV16lStW7dOn3zyiT755BP993//t6ZPn67x48f7u0YAAACf+bRmp6ysTPfff79++MMfqr29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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic[\"Age\"].plot.hist(bins=20)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"同样,我们也可以绘制箱型图"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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3qvo6OhgjwIgiLjmAwAAGMWZDwAAYBTxAQAAjCI+AACAUcQHAAAwivgAEBB1dXWKiIjQwoULgz0KgGGOu10ABMTNN9+s+Ph4VVZWqrGxUcnJycEeCcAwxZkPAIPW1dWl559/XrfddpsWLlyo7du3+2z/1a9+pWnTpikmJkY5OTl6+umnFRYWpo6ODu8+Bw8eVHZ2tmJjY5WSkqI77rhD3d3dZv8gAIwgPgAM2gsvvKCMjAxdeOGF+t73vqef//zn3q/Vbm5u1qJFi5Sfn6+3335bt956q3784x/7vP7YsWP627/9WxUWFuqdd97R888/r4MHD2rZsmXB+OMAGGJ87AJg0K644gotXrxYP/zhD3XmzBklJSVp586duvLKK7V69Wq99NJLevfdd73733PPPVq/fr1OnjypcePG6eabb1ZERIR+9rOfefc5ePCgvvWtb6m7u1sxMTHB+GMBGCKc+QAwKI2NjXrjjTd03XXXSZIiIyN17bXXqrKy0rt99uzZPq+5/PLLfX5+++23tX37dsXHx3uXvLw89ff3q7m52cwfBIAxkcEeAEBoq6ys1JkzZ3wuMPV4PIqOjtaWLVu+0jG6urp066236o477vjMttTU1IDNCmB4ID4ADNiZM2f0zDPP6JFHHtFVV13lsy0/P1+//OUvdeGFF+pf//Vffba9+eabPj9feumleu+995Senj7kMwMIPq75ADBgu3fv1rXXXqsTJ07IarX6bPvRj36kX//613rhhRd04YUXqri4WEuXLtXhw4e1cuVKffjhh+ro6JDVatU777yjOXPm6KabbtLNN9+suLg4vffee3r11Ve/8tkTAKGDaz4ADFhlZaVyc3M/Ex6SVFhYqLfeekudnZ3atWuXqqurNXPmTG3dutV7t0t0dLQkaebMmTpw4IDef/99ZWdn65JLLtHatWt5VggwQnHmA4Bx69ev17Zt29TS0hLsUQAEAdd8ABhyFRUVmj17thISEvTv//7veuihh3iGBzCKER8AhlxTU5PWrVunP/7xj0pNTdXKlStVWloa7LEABAkfuwAAAKO44BQAABhFfAAAAKOIDwAAYBTxAQAAjCI+AACAUcQHAAAwivgAAABGER8AAMAo4gMAABj1/wE4/XiNqtoqiwAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic[\"Age\"].plot.box()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 添加新列\n",
"我们知道,泰坦尼克号失事于1912年,我们可以通过这一信息倒推出乘客的出生年"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
" YOB | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" Braund, Mr. Owen Harris | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
" 1890.0 | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
" 1874.0 | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1 | \n",
" 3 | \n",
" Heikkinen, Miss. Laina | \n",
" female | \n",
" 26.0 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
" 1886.0 | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
" female | \n",
" 35.0 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
" 1877.0 | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" Allen, Mr. William Henry | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
" 1877.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked YOB \n",
"0 0 A/5 21171 7.2500 NaN S 1890.0 \n",
"1 0 PC 17599 71.2833 C85 C 1874.0 \n",
"2 0 STON/O2. 3101282 7.9250 NaN S 1886.0 \n",
"3 0 113803 53.1000 C123 S 1877.0 \n",
"4 0 373450 8.0500 NaN S 1877.0 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic[\"YOB\"] = 1912 - titanic[\"Age\"]\n",
"titanic.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 统计量计算\n",
"前面已经介绍过了,如何计算统计量,现在展示如何分组计算统计量,比如我想计算男女乘客分别的平均年龄"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Age | \n",
"
\n",
" \n",
" Sex | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" female | \n",
" 27.915709 | \n",
"
\n",
" \n",
" male | \n",
" 30.726645 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Age\n",
"Sex \n",
"female 27.915709\n",
"male 30.726645"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic[[\"Sex\", \"Age\"]].groupby(\"Sex\").mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"同样的,如果我想将`Pclass`也加入分类中。"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Sex Pclass\n",
"female 1 34.611765\n",
" 2 28.722973\n",
" 3 21.750000\n",
"male 1 41.281386\n",
" 2 30.740707\n",
" 3 26.507589\n",
"Name: Age, dtype: float64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic.groupby([\"Sex\", \"Pclass\"])[\"Age\"].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果我想计算,乘坐3种舱位的乘客数量,下面两种方式将得到相同的结果"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pclass\n",
"3 491\n",
"1 216\n",
"2 184\n",
"Name: count, dtype: int64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic[\"Pclass\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pclass\n",
"1 216\n",
"2 184\n",
"3 491\n",
"Name: Pclass, dtype: int64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic.groupby(\"Pclass\")[\"Pclass\"].count()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 改变表格布局\n",
"\n",
"有些时候,我们需要按照指定的顺序排列我们的表格,以泰坦尼克号数据集为例"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 803 | \n",
" 804 | \n",
" 1 | \n",
" 3 | \n",
" Thomas, Master. Assad Alexander | \n",
" male | \n",
" 0.42 | \n",
" 0 | \n",
" 1 | \n",
" 2625 | \n",
" 8.5167 | \n",
" NaN | \n",
" C | \n",
"
\n",
" \n",
" 755 | \n",
" 756 | \n",
" 1 | \n",
" 2 | \n",
" Hamalainen, Master. Viljo | \n",
" male | \n",
" 0.67 | \n",
" 1 | \n",
" 1 | \n",
" 250649 | \n",
" 14.5000 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 644 | \n",
" 645 | \n",
" 1 | \n",
" 3 | \n",
" Baclini, Miss. Eugenie | \n",
" female | \n",
" 0.75 | \n",
" 2 | \n",
" 1 | \n",
" 2666 | \n",
" 19.2583 | \n",
" NaN | \n",
" C | \n",
"
\n",
" \n",
" 469 | \n",
" 470 | \n",
" 1 | \n",
" 3 | \n",
" Baclini, Miss. Helene Barbara | \n",
" female | \n",
" 0.75 | \n",
" 2 | \n",
" 1 | \n",
" 2666 | \n",
" 19.2583 | \n",
" NaN | \n",
" C | \n",
"
\n",
" \n",
" 78 | \n",
" 79 | \n",
" 1 | \n",
" 2 | \n",
" Caldwell, Master. Alden Gates | \n",
" male | \n",
" 0.83 | \n",
" 0 | \n",
" 2 | \n",
" 248738 | \n",
" 29.0000 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass Name Sex \\\n",
"803 804 1 3 Thomas, Master. Assad Alexander male \n",
"755 756 1 2 Hamalainen, Master. Viljo male \n",
"644 645 1 3 Baclini, Miss. Eugenie female \n",
"469 470 1 3 Baclini, Miss. Helene Barbara female \n",
"78 79 1 2 Caldwell, Master. Alden Gates male \n",
"\n",
" Age SibSp Parch Ticket Fare Cabin Embarked \n",
"803 0.42 0 1 2625 8.5167 NaN C \n",
"755 0.67 1 1 250649 14.5000 NaN S \n",
"644 0.75 2 1 2666 19.2583 NaN C \n",
"469 0.75 2 1 2666 19.2583 NaN C \n",
"78 0.83 0 2 248738 29.0000 NaN S "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"titanic.sort_values(by=\"Age\").head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有些时候,我们需要将一张“长表格”转化为一张“宽表格”。我们观察[air_quality_long.csv](air_quality_long.csv)中,二氧化氮的部分,并且观察其中的一小部分"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" city | \n",
" country | \n",
" location | \n",
" parameter | \n",
" value | \n",
" unit | \n",
"
\n",
" \n",
" date.utc | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 2019-04-09 01:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" no2 | \n",
" 22.5 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-04-09 01:00:00+00:00 | \n",
" Paris | \n",
" FR | \n",
" FR04014 | \n",
" no2 | \n",
" 24.4 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-04-09 02:00:00+00:00 | \n",
" London | \n",
" GB | \n",
" London Westminster | \n",
" no2 | \n",
" 67.0 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-04-09 02:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" no2 | \n",
" 53.5 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-04-09 02:00:00+00:00 | \n",
" Paris | \n",
" FR | \n",
" FR04014 | \n",
" no2 | \n",
" 27.4 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-04-09 03:00:00+00:00 | \n",
" London | \n",
" GB | \n",
" London Westminster | \n",
" no2 | \n",
" 67.0 | \n",
" µg/m³ | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" city country location parameter \\\n",
"date.utc \n",
"2019-04-09 01:00:00+00:00 Antwerpen BE BETR801 no2 \n",
"2019-04-09 01:00:00+00:00 Paris FR FR04014 no2 \n",
"2019-04-09 02:00:00+00:00 London GB London Westminster no2 \n",
"2019-04-09 02:00:00+00:00 Antwerpen BE BETR801 no2 \n",
"2019-04-09 02:00:00+00:00 Paris FR FR04014 no2 \n",
"2019-04-09 03:00:00+00:00 London GB London Westminster no2 \n",
"\n",
" value unit \n",
"date.utc \n",
"2019-04-09 01:00:00+00:00 22.5 µg/m³ \n",
"2019-04-09 01:00:00+00:00 24.4 µg/m³ \n",
"2019-04-09 02:00:00+00:00 67.0 µg/m³ \n",
"2019-04-09 02:00:00+00:00 53.5 µg/m³ \n",
"2019-04-09 02:00:00+00:00 27.4 µg/m³ \n",
"2019-04-09 03:00:00+00:00 67.0 µg/m³ "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"air_quality = pd.read_csv(\"air_quality_long.csv\", index_col=\"date.utc\", parse_dates=True)\n",
"no2 = air_quality[air_quality[\"parameter\"] == \"no2\"]\n",
"no2_subset = no2.sort_index().groupby([\"location\"]).head(2)\n",
"no2_subset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这种表格往往被我们称之为长表格,如果我们想要将其中的3个站点做为单独的列,也就是变为宽表格,在pandas中很容易做到这一点。"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" location | \n",
" BETR801 | \n",
" FR04014 | \n",
" London Westminster | \n",
"
\n",
" \n",
" date.utc | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 2019-04-09 01:00:00+00:00 | \n",
" 22.5 | \n",
" 24.4 | \n",
" NaN | \n",
"
\n",
" \n",
" 2019-04-09 02:00:00+00:00 | \n",
" 53.5 | \n",
" 27.4 | \n",
" 67.0 | \n",
"
\n",
" \n",
" 2019-04-09 03:00:00+00:00 | \n",
" NaN | \n",
" NaN | \n",
" 67.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"location BETR801 FR04014 London Westminster\n",
"date.utc \n",
"2019-04-09 01:00:00+00:00 22.5 24.4 NaN\n",
"2019-04-09 02:00:00+00:00 53.5 27.4 67.0\n",
"2019-04-09 03:00:00+00:00 NaN NaN 67.0"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"air_quality = pd.read_csv(\"air_quality_long.csv\", index_col=\"date.utc\", parse_dates=True)\n",
"no2 = air_quality[air_quality[\"parameter\"] == \"no2\"]\n",
"no2_subset = no2.sort_index().groupby([\"location\"]).head(2)\n",
"no2_subset.pivot(columns=\"location\", values=\"value\")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGrCAYAAADqwWxuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOxdd5wURdp+uifsbF5YwhIFIxhQTIgRThRROfXw7vS4U0/F+4yn3pnuDJjziZgz5wmHOXEKIoqBJKAgIiIoGXYJy6bZndTd3x+dqqqrZ3rC7s6u9fx+sDM93dXV3dVVbz3v874laZqmQUBAQEBAQEAgjyC3dwUEBAQEBAQEBFgIA0VAQEBAQEAg7yAMFAEBAQEBAYG8gzBQBAQEBAQEBPIOwkAREBAQEBAQyDsIA0VAQEBAQEAg7yAMFAEBAQEBAYG8g7+9K5AJVFXF1q1bUVpaCkmS2rs6AgICAgICAh6gaRoaGxvRu3dvyHJyjqRDGihbt25Fv3792rsaAgICAgICAhlg06ZN6Nu3b9J9OqSBUlpaCkC/wLKysnaujYCAgICAgIAXNDQ0oF+/ftY4ngwd0kAx3TplZWXCQBEQEBAQEOhg8CLPECJZAQEBAQEBgbxD2gbK559/jrFjx6J3796QJAnvvPOO9Vs8HscNN9yAgw46CMXFxejduzfOO+88bN26lSqjtrYW48ePR1lZGSoqKnDRRRehqakp64sREBAQEBAQ6BxI20AJh8M4+OCD8cQTTzh+a25uxtdff41bbrkFX3/9Nd566y2sXr0av/71r6n9xo8fj5UrV2L27NmYMWMGPv/8c1xyySWZX4WAgICAgIBAp4KkaZqW8cGShLfffhtnnnmm6z6LFy/GkUceiQ0bNqB///5YtWoV9t9/fyxevBiHH344AGDmzJk49dRTsXnzZvTu3TvleRsaGlBeXo76+nqhQREQEMhrKIqCeDze3tUQEGgTBAIB+Hw+19/TGb9bXSRbX18PSZJQUVEBAFiwYAEqKios4wQARo0aBVmWsWjRIpx11lmOMqLRKKLRqPW9oaGhtastICAgkBU0TUN1dTXq6urauyoCAm2KiooKVFVVZZ2nrFUNlEgkghtuuAHnnnuuZSlVV1ejR48edCX8fnTt2hXV1dXccu69917cfvvtrVlVAQEBgZzCNE569OiBoqIikVRSoNND0zQ0Nzdj+/btAIBevXplVV6rGSjxeBy/+93voGkannrqqazKuummm3Dttdda3804agEBAYF8hKIolnFSWVnZ3tUREGgzFBYWAgC2b9+OHj16JHX3pEKrGCimcbJhwwZ88sknlJ+pqqrKsq5MJBIJ1NbWoqqqilteQUEBCgoKWqOqAgICAjmHqTkpKipq55oICLQ9zHYfj8ezMlByngfFNE7WrFmDjz/+2DF7GD58OOrq6rB06VJr2yeffAJVVTFs2LBcV0dAQECg3SDcOgK/ROSq3afNoDQ1NWHt2rXW93Xr1mHZsmXo2rUrevXqhbPPPhtff/01ZsyYAUVRLF1J165dEQwGMXjwYJxyyimYMGECnn76acTjcVxxxRU455xzPEXwCAgICAgICHR+pG2gLFmyBCNHjrS+m9qQ888/HxMnTsR7770HADjkkEOo4z799FOMGDECADB16lRcccUVOPHEEyHLMsaNG4fJkydneAkCeQNNA+LNQLC4vWsiICAgINDBkbaBMmLECCRLneIlrUrXrl0xbdq0dE8tkO/47znAjzOBvy4Hugxo79oICAjkIUaMGIFDDjkEkyZNarc6XHDBBairq6MyoQvkH8RaPAK5w48z9b9f/6d96yEgICAAYP369ZAkCcuWLaO2P/roo5gyZUq71EnAO4SBIpB7fPFQe9dAQEBAwBXl5eVW8lCB/IUwUAQEBAQE2gW7d+/Geeedhy5duqCoqAhjxozBmjVrqH3mzZuHESNGoKioCF26dMHo0aOxe/duAPoyKcceeywqKipQWVmJ008/HT/99JN17MCBAwEAQ4cOhSRJlg7yggsuoJZoiUajuOqqq9CjRw+EQiEce+yxWLx4sfX73LlzIUkS5syZg8MPPxxFRUU4+uijsXr16la6MwKAMFAEBAQEBNoJF1xwAZYsWYL33nsPCxYsgKZpOPXUU608MsuWLcOJJ56I/fffHwsWLMCXX36JsWPHQlEUAPritddeey2WLFmCOXPmQJZlnHXWWVBVFQDw1VdfAQA+/vhjbNu2DW+99Ra3Htdffz3efPNN/Pvf/8bXX3+NvffeG6NHj0ZtbS213z//+U88/PDDWLJkCfx+Py688MLWujUCaIO1eAQEBAQEBFisWbMG7733HubNm4ejjz4agB7h2a9fP7zzzjv47W9/iwceeACHH344nnzySeu4Aw44wPo8btw4qswXX3wR3bt3x/fff48DDzwQ3bt3BwBUVla6JgINh8N46qmnMGXKFIwZMwYA8Nxzz2H27Nl44YUXcN1111n73n333TjhhBMAADfeeCNOO+00RCIRhEKhHNwRARaCQREQEBAQaHOsWrUKfr+fStBZWVmJ/fbbD6tWrQJgMyhuWLNmDc4991zsueeeKCsrw4ABAwAAGzdu9FyPn376CfF4HMccc4y1LRAI4Mgjj7TqYWLIkCHWZ3OdGTYzukDuIBgUAQEBAYG8hLmuixvGjh2LPfbYA8899xx69+4NVVVx4IEHIhaLtUp9AoGA9dnMlmq6kwRyD8GgCAgICAi0OQYPHoxEIoFFixZZ23bt2oXVq1dj//33B6AzFnPmzOEeb+57880348QTT8TgwYMt8ayJYDAIAJZmhYe99toLwWAQ8+bNs7bF43EsXrzYqodA+0AYKAICAgICbY599tkHZ5xxBiZMmIAvv/wSy5cvxx//+Ef06dMHZ5xxBgB9JfvFixfjsssuw7fffosffvgBTz31FHbu3IkuXbqgsrISzz77LNauXYtPPvmEWvUeAHr06IHCwkLMnDkTNTU1qK+vd9SjuLgYl156Ka677jrMnDkT33//PSZMmIDm5mZcdNFFbXIvBPgQBoqAgICAQLvgpZdewmGHHYbTTz8dw4cPh6Zp+OCDDyxXyr777ouPPvoIy5cvx5FHHonhw4fj3Xffhd/vhyzLmD59OpYuXYoDDzwQ11xzDR588EGqfL/fj8mTJ+OZZ55B7969LcOHxX333Ydx48bhT3/6Ew499FCsXbsWs2bNQpcuXVr9Hgi4Q9K85KbPMzQ0NKC8vBz19fUoKytr7+oImJhYTnx2zlQEBH4piEQiWLduHQYOHCgiPAR+cUjW/tMZvwWDIiAgICAgIJB3EAaKgICAgICAQN5BGCgCAgICAgICeQdhoAgICAgICAjkHYSBIiAgICAgIJB3EAaKgICAgICAQN5BGCgCAgICAgICeQdhoAgICAgICAjkHYSBIiAgICAgIJB3EAaKgICAgICFCy64AJIkWf8qKytxyimn4Ntvv7X2IX8n/02fPt1xPPtvwIABAIARI0ZY20KhEPbdd1/ce++9YJObL168GCeeeCIqKirQpUsXjB49GsuXL6f2+fbbb3HcccchFAqhX79+eOCBB6jfV65ciXHjxmHAgAGQJAmTJk1qlXsnkFsIA0VAQEBAgMIpp5yCbdu2Ydu2bZgzZw78fj9OP/10ap+XXnrJ2sf8d+aZZ+LRRx+ltrH7Ll682CpjwoQJ2LZtG1avXo2bbroJt956K55++mnr96amJpxyyino378/Fi1ahC+//BKlpaUYPXo04vE4AD11+sknn4w99tgDS5cuxYMPPoiJEyfi2Weftcppbm7Gnnvuifvuuw9VVVWteesEcgh/e1dAQEBAQCC/UFBQYA3kVVVVuPHGG3Hcccdhx44d6N69OwCgoqKCO9iHQiGUl5dT29z2LSoqsrb/+c9/xuOPP47Zs2fj0ksvBQD88MMPqK2txR133IF+/foBAG677TYMGTIEGzZswN57742pU6ciFovhxRdfRDAYxAEHHIBly5bhX//6Fy655BIAwBFHHIEjjjgCAHDjjTfm4hYJtAEEgyIgICDQytA0Dc2xRLv8y3Y92KamJrzyyivYe++9UVlZmaM7QkPTNHzxxRf44YcfEAwGre377bcfKisr8cILLyAWi6GlpQUvvPACBg8ebLmKFixYgOOPP546bvTo0Vi9ejV2797dKvUVaBsIBkVAQECgldESV7D/rbPa5dzf3zEaRcH0uvoZM2agpKQEABAOh9GrVy/MmDEDsmzPac8991z4fD76XN9/j/79+3s+z5NPPonnn38esVgM8XgcoVAIV111lfV7aWkp5s6dizPPPBN33nknAGCfffbBrFmz4Pfr11RdXY2BAwdS5fbs2dP6rUuXLmlcuUA+QTAoAgICAgIURo4ciWXLlmHZsmX46quvMHr0aIwZMwYbNmyw9nnkkUesfcx/vXv3Tus848ePx7JlyzBv3jyMGTMG//znP3H00Udbv7e0tOCiiy7CMcccg4ULF2LevHk48MADcdppp6GlpSVn1yuQnxAMioCAgEArozDgw/d3jG63c6eL4uJi7L333tb3559/HuXl5Xjuuedw1113AdC1KeQ+maC8vNwq47XXXsPee++No446CqNGjQIATJs2DevXr8eCBQss9mbatGno0qUL3n33XZxzzjmoqqpCTU0NVa75XQhiOzaEgSIgICDQypAkKW03Sz5BkiTIstyqrEVJSQn++te/4u9//zu++eYbSJKE5uZmyLIMSZKs/czvqqoCAIYPH45//vOfiMfjCAQCAIDZs2djv/32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unUrbrjhBtx6662QjfW7hgwZgttuuw0AsM8+++Dxxx/HnDlzcNJJJ+Hjjz/GDz/8gFmzZqF3794AgHvuuQdjxoyxzjNt2jREIhG8/PLLKC4uBgA8/vjjGDt2LO6//3707NkTANClSxc8/vjj8Pl8GDRoEE477TTMmTMnqYESDoexePFiDB8+HHPnzsV1112HY489Fueffz4ikQg0TcNXX32Fiy++GIBuANx4443W4LznnnvizjvvxPXXX4/bbrsNGzduRFVVFUaNGoVAIID+/fvjyCOPBAB07doVPp8PpaWlqKqqouoSj8fx1FNPYa+99gIAnH322fjPf/6DmpoalJSUYP/998fIkSPx6aefJjVQLrjgApx77rnWfZw8eTK++uornHLKKdi4cSOGDh2Kww8/HIDOwJjo3r07AKCyspKq22233YaHH34Yv/nNbwDoTMv333+PZ555hjJQrr76amuf1oRw8QjwkTWDIgyUjgAhkm1NdK57u2rVKgwfPpxiY4455hg0NTVh8+bN1rYhQ4ZQx/Xq1Qvbt2+3yujXr59lnADA8OHDHec5+OCDLePEPI+qqli9erW17YADDoDPZ7uiyfPwsPfee6Nv376YO3cuGhoa8M033+CEE05Ar1690L9/fyxYsMDSn5gMyvLly3HHHXegpKTE+jdhwgRs27YNzc3N+O1vf4uWlhbsueeemDBhAt5++23K5eWGoqIiyzgBgJ49e2LAgAEoKSmhtiW7HoC+18XFxSgrK7OOufTSSzF9+nQccsghuP766zF//vykZYXDYfz000+46KKLqOu966678NNPP1H7mkZPa0MwKAJ8CAZFQCBnKPQXYtEfFrXbudsSgUCA+i5JElQ19/1BJucZMWIEPv30UwwZMgT77LMPevToAQA44YQT8Omnn0LTNOy9997o168fAKCpqQm33347ly0IhULo168fVq9ejY8//hizZ8/GZZddhgcffBCfffaZo36p6p7J9SQ7ZsyYMdiwYQM++OADzJ49GyeeeCIuv/xyPPTQQ9yyTI3Pc889h2HDaLaPNAQBUMZja0IYKAI6VAX49lWg3zCgci+kvZaOYFA6JASD0jaQJCknbpb2xODBg/Hmm29C0zSLRZk3bx5KS0vRt29fz2Vs2rQJ27ZtQ69evQDAEfo7ePBgTJkyBeFw2BoI582bB1mWsd9++2V1DSNHjsRVV12F/fffnxKGHn/88XjuueegaZrFngDAoYceitWrV2Pvvfd2LbOwsBBjx47F2LFjcfnll2PQoEFYsWIFDj30UASDQUro2tbo3r07zj//fJx//vk47rjjcN111+Ghhx6yNCdk3Xr27InevXvj559/xvjx49uryhSEgSKgY/l/gXcv1z9PrM+gAGGgdEgI+0SAQX19vSM/RmVlJS677DJMmjQJV155Ja644gqsXr0at912G6699lpLf5IKo0aNwr777ovzzz8fDz74IBoaGvDPf/6T2mf8+PG47bbbcP7552PixInYsWMHrrzySvzpT3+y9CeZwtShvPjii3juuees7SeccIKlO7nsssus7bfeeitOP/109O/fH2effTZkWcby5cvx3Xff4a677sKUKVOgKAqGDRuGoqIivPLKKygsLMQee+wBQNd9fP755zjnnHNQUFCAbt26ZVX/dHDrrbfisMMOwwEHHIBoNIoZM2Zg8ODBAIAePXqgsLAQM2fORN++fREKhVBeXo7bb78dV111FcrLy3HKKacgGo1iyZIl2L17N6699to2q7sJoUER0LF5SXbHCwZFQKBTYO7cuRg6dCj17/bbb0efPn3wwQcf4KuvvsLBBx+M//u//8NFF12Em2++2XPZsizj7bffRktLC4488khcfPHFuPvuu6l9ioqKMGvWLNTW1uKII47A2WefjRNPPBGPP/541tc2cOBA7LHHHmhsbMQJJ5xgbe/fvz969+6NWCxGMSujR4/GjBkz8NFHH+GII47AUUcdhUceecQyQCoqKvDcc8/hmGOOwZAhQ/Dxxx/j/fffR2VlJQDgjjvuwPr167HXXntZwtS2QjAYxE033YQhQ4bg+OOPh8/nw/Tp0wEAfr8fkydPxjPPPIPevXvjjDPOAABcfPHFeP755/HSSy/hoIMOwgknnIApU6ZYYcltDUnTOl48aENDA8rLy1FfX4+ysrL2rk7nwMybgIVGvPvEeuDlM4Cf59rfU6H2Z2DyUPv7uBeAg87OeTUFcosJH03Awm06xb7i/BXtXJtOgonliJT0w7oTnsDAg4a1ahimgEA+IhKJYN26dRg4cKCj/aczfgsGRUCHvyC741k7d/f67MoTEBAQEPhFQxgoAjr8OZ7ltezObXkCAgICAr8oCANFQEe2BgrLoKjtp1wX8A4RxdOaEPdW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8//06dN088030/Dhw+nnn382fMeE56mnnqKRI0catvn9fiIievnll6l169a0ceNGrR+/++47atOmDU2bNo2IuH+jgQWUGPDjjz/S2LFjKSUlhXJzc2nZsmVERFReXq7tc+bMGfryyy/J7/drE7WkpISmTJlCo0ePptLS0ri0va5x5513Ups2bWjZsmU0Y8YMys/Pp169elFRUZG2jzour732GnXv3p1eeeUV7TsWUsLDc7x28Nhjj1Hbtm1pxYoV9Mwzz9DAgQOpVatWtGPHDm0fdWxWrFhBAwYMoIceeijkO74PdH755Re67rrrKDs7myRJoldffZWIjHOfiGj16tXk9XoNfffEE09Qx44d6dy5czXa5toK61hjwFdffQVJkvDmm29i1KhReP755+Hz+WC327Uw1oyMDFx22WVwOByw2WwIBoNISkrCzp074XK54Ha74/wrajdEhBMnTmDDhg144IEHcN111+GZZ57BP//5T+zduxezZ89GSUkJAGiq7Ntvvx3NmzfHf/7zH2zbtg0ffPABZs+eHc+fkbDwHE9sgsEgSktLsW7dOtxwww0YO3YsZsyYgbVr14KIMG/ePBQUFACQ7xUAGDt2LPr06YONGzdizZo1eP/99zF9+nQAYHOPwPbt22G327FkyRLcd999mDt3Lrxer2HuA8Dll18Ol8ul+f0AwPfff4+8vDy4XC5tGxOBuIpHdQxVUj537hx9+eWXRES0fPlyys/Pp/nz5xNRZLXexo0bqW/fvrRixYrYN/Yi4OjRo2Sz2eibb74hIl39+ve//51cLhetX79e21cdly+++ILatGlD9evXJ6fTSU888UTNNzyB4Tleezh9+jRlZWVpfa1qrD799FPKycmht956SxtPdcy2bNlCPXv2pKSkJHI6nfSnP/0pPo1PQNS+Ki4upk2bNhER0bZt26hDhw509913E1Hkub9lyxYaOHAg/fWvf415W+sKLKDEmBMnTtCMGTOoS5cutG/fPiIyqgJ3795Nn332GU2fPp3S09Ppj3/8I5WVlcWruXWK06dPU58+feiuu+4iIqOaukePHnTjjTcSkb6o7Nu3j6ZOnUqSJNHkyZPp5MmTNd/oWgjP8cRDnesjRoyg8ePHE5Hx4XnFFVfQsGHDDONw8OBBuuOOO0iSJLr11lvp1KlTNdvoWkhxcTE9++yzlJ6ervn2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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"air_quality = pd.read_csv(\"air_quality_long.csv\", index_col=\"date.utc\", parse_dates=True)\n",
"no2 = air_quality[air_quality[\"parameter\"] == \"no2\"]\n",
"no2.pivot(columns=\"location\", values=\"value\").plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们还可以将宽表格重新转化为长表格"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" date.utc | \n",
" location | \n",
" value | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2019-04-09 01:00:00+00:00 | \n",
" BETR801 | \n",
" 22.5 | \n",
"
\n",
" \n",
" 1 | \n",
" 2019-04-09 02:00:00+00:00 | \n",
" BETR801 | \n",
" 53.5 | \n",
"
\n",
" \n",
" 2 | \n",
" 2019-04-09 03:00:00+00:00 | \n",
" BETR801 | \n",
" NaN | \n",
"
\n",
" \n",
" 3 | \n",
" 2019-04-09 01:00:00+00:00 | \n",
" FR04014 | \n",
" 24.4 | \n",
"
\n",
" \n",
" 4 | \n",
" 2019-04-09 02:00:00+00:00 | \n",
" FR04014 | \n",
" 27.4 | \n",
"
\n",
" \n",
" 5 | \n",
" 2019-04-09 03:00:00+00:00 | \n",
" FR04014 | \n",
" NaN | \n",
"
\n",
" \n",
" 6 | \n",
" 2019-04-09 01:00:00+00:00 | \n",
" London Westminster | \n",
" NaN | \n",
"
\n",
" \n",
" 7 | \n",
" 2019-04-09 02:00:00+00:00 | \n",
" London Westminster | \n",
" 67.0 | \n",
"
\n",
" \n",
" 8 | \n",
" 2019-04-09 03:00:00+00:00 | \n",
" London Westminster | \n",
" 67.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" date.utc location value\n",
"0 2019-04-09 01:00:00+00:00 BETR801 22.5\n",
"1 2019-04-09 02:00:00+00:00 BETR801 53.5\n",
"2 2019-04-09 03:00:00+00:00 BETR801 NaN\n",
"3 2019-04-09 01:00:00+00:00 FR04014 24.4\n",
"4 2019-04-09 02:00:00+00:00 FR04014 27.4\n",
"5 2019-04-09 03:00:00+00:00 FR04014 NaN\n",
"6 2019-04-09 01:00:00+00:00 London Westminster NaN\n",
"7 2019-04-09 02:00:00+00:00 London Westminster 67.0\n",
"8 2019-04-09 03:00:00+00:00 London Westminster 67.0"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"air_quality = pd.read_csv(\"air_quality_long.csv\", index_col=\"date.utc\", parse_dates=True)\n",
"no2 = air_quality[air_quality[\"parameter\"] == \"no2\"]\n",
"no2_subset = no2.sort_index().groupby([\"location\"]).head(2)\n",
"no2_pivot = no2_subset.pivot(columns=\"location\", values=\"value\").reset_index()\n",
"no2_pivot.melt(id_vars=\"date.utc\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 合并表格\n",
"### 纵向连接\n",
""
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pm25的尺寸: (1825, 6)\n",
"no2的尺寸: (3447, 6)\n",
"合并后的尺寸: (5272, 6)\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" city | \n",
" country | \n",
" location | \n",
" parameter | \n",
" value | \n",
" unit | \n",
"
\n",
" \n",
" date.utc | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 2019-06-18 06:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 18.0 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-06-17 08:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 6.5 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-06-17 07:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 18.5 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-06-17 06:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 16.0 | \n",
" µg/m³ | \n",
"
\n",
" \n",
" 2019-06-17 05:00:00+00:00 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 7.5 | \n",
" µg/m³ | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" city country location parameter value unit\n",
"date.utc \n",
"2019-06-18 06:00:00+00:00 Antwerpen BE BETR801 pm25 18.0 µg/m³\n",
"2019-06-17 08:00:00+00:00 Antwerpen BE BETR801 pm25 6.5 µg/m³\n",
"2019-06-17 07:00:00+00:00 Antwerpen BE BETR801 pm25 18.5 µg/m³\n",
"2019-06-17 06:00:00+00:00 Antwerpen BE BETR801 pm25 16.0 µg/m³\n",
"2019-06-17 05:00:00+00:00 Antwerpen BE BETR801 pm25 7.5 µg/m³"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"air_quality = pd.read_csv(\"air_quality_long.csv\", index_col=\"date.utc\", parse_dates=True)\n",
"#将其拆分为两个表格\n",
"air_quality_pm25 = air_quality[air_quality[\"parameter\"] == \"pm25\"]\n",
"air_quality_no2 = air_quality[air_quality[\"parameter\"] == \"no2\"]\n",
"#我们观察其尺寸\n",
"print(\"pm25的尺寸:\", air_quality_pm25.shape)\n",
"print(\"no2的尺寸:\", air_quality_no2.shape)\n",
"#合并两个表格\n",
"air_quality2 = pd.concat([air_quality_pm25, air_quality_no2], axis=0)\n",
"print(\"合并后的尺寸:\", air_quality2.shape)\n",
"air_quality2.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 横向连接\n",
"\n",
"\n",
"假设我们现在又有了站点的坐标数据[air_quality_long](air_quality_long.csv),我们想将其添加到[air_quality_long.csv](air_quality_long.csv)这张表上"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" city | \n",
" country | \n",
" location | \n",
" parameter | \n",
" value | \n",
" unit | \n",
" coordinates.longitude | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 18.0 | \n",
" µg/m³ | \n",
" 4.43182 | \n",
"
\n",
" \n",
" 1 | \n",
" Antwerpen | \n",
" BE | \n",
" BETR801 | \n",
" pm25 | \n",
" 6.5 | \n",
" µg/m³ | \n",
" 4.43182 | \n",
"
\n",
" \n",
" 177 | \n",
" London | \n",
" GB | \n",
" London Westminster | \n",
" pm25 | \n",
" 7.0 | \n",
" µg/m³ | \n",
" -0.13193 | \n",
"
\n",
" \n",
" 178 | \n",
" London | \n",
" GB | \n",
" London Westminster | \n",
" pm25 | \n",
" 7.0 | \n",
" µg/m³ | \n",
" -0.13193 | \n",
"
\n",
" \n",
" 1825 | \n",
" Paris | \n",
" FR | \n",
" FR04014 | \n",
" no2 | \n",
" 20.0 | \n",
" µg/m³ | \n",
" 2.39390 | \n",
"
\n",
" \n",
" 1826 | \n",
" Paris | \n",
" FR | \n",
" FR04014 | \n",
" no2 | \n",
" 21.8 | \n",
" µg/m³ | \n",
" 2.39390 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" city country location parameter value unit \\\n",
"0 Antwerpen BE BETR801 pm25 18.0 µg/m³ \n",
"1 Antwerpen BE BETR801 pm25 6.5 µg/m³ \n",
"177 London GB London Westminster pm25 7.0 µg/m³ \n",
"178 London GB London Westminster pm25 7.0 µg/m³ \n",
"1825 Paris FR FR04014 no2 20.0 µg/m³ \n",
"1826 Paris FR FR04014 no2 21.8 µg/m³ \n",
"\n",
" coordinates.longitude \n",
"0 4.43182 \n",
"1 4.43182 \n",
"177 -0.13193 \n",
"178 -0.13193 \n",
"1825 2.39390 \n",
"1826 2.39390 "
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"air_quality = pd.read_csv(\"air_quality_long.csv\", index_col=\"date.utc\", parse_dates=True)\n",
"stations_coord = pd.read_csv(\"air_quality_stations.csv\")\n",
"air_quality = pd.merge(air_quality, stations_coord, how=\"left\", on=\"location\")\n",
"air_quality.groupby([\"location\"]).head(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 向量化操作\n",
"我们想象这样一个需求,我们需要将泰坦尼克数据集中的所有人名全部改为大写,一般而言,我们会想这样实现"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" BRAUND, MR. OWEN HARRIS | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" CUMINGS, MRS. JOHN BRADLEY (FLORENCE BRIGGS TH... | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1 | \n",
" 3 | \n",
" HEIKKINEN, MISS. LAINA | \n",
" female | \n",
" 26.0 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" FUTRELLE, MRS. JACQUES HEATH (LILY MAY PEEL) | \n",
" female | \n",
" 35.0 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" ALLEN, MR. WILLIAM HENRY | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 BRAUND, MR. OWEN HARRIS male 22.0 1 \n",
"1 CUMINGS, MRS. JOHN BRADLEY (FLORENCE BRIGGS TH... female 38.0 1 \n",
"2 HEIKKINEN, MISS. LAINA female 26.0 0 \n",
"3 FUTRELLE, MRS. JACQUES HEATH (LILY MAY PEEL) female 35.0 1 \n",
"4 ALLEN, MR. WILLIAM HENRY male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"\n",
"for i in titanic.iterrows():\n",
" titanic.loc[i[0], \"Name\"] = titanic.loc[i[0], \"Name\"].upper()\n",
"\n",
"titanic.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这看似是一个高效的方法,但是实际上python中循环效率很低,所以实际上,Pandas为我们提供了更加高效的方法"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" BRAUND, MR. OWEN HARRIS | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" CUMINGS, MRS. JOHN BRADLEY (FLORENCE BRIGGS TH... | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1 | \n",
" 3 | \n",
" HEIKKINEN, MISS. LAINA | \n",
" female | \n",
" 26.0 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" FUTRELLE, MRS. JACQUES HEATH (LILY MAY PEEL) | \n",
" female | \n",
" 35.0 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" ALLEN, MR. WILLIAM HENRY | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 BRAUND, MR. OWEN HARRIS male 22.0 1 \n",
"1 CUMINGS, MRS. JOHN BRADLEY (FLORENCE BRIGGS TH... female 38.0 1 \n",
"2 HEIKKINEN, MISS. LAINA female 26.0 0 \n",
"3 FUTRELLE, MRS. JACQUES HEATH (LILY MAY PEEL) female 35.0 1 \n",
"4 ALLEN, MR. WILLIAM HENRY male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"\n",
"titanic[\"Name\"] = titanic[\"Name\"].map(lambda x: x.upper())\n",
"\n",
"titanic.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"两种方法实现了同样的效果,我们来对比一下他们的耗时"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"使用for循环耗时: 90.81252600003609 ms\n",
"使用map方法耗时: 0.3222920001917373 ms\n"
]
}
],
"source": [
"import pandas as pd\n",
"import time\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"\n",
"T1 = time.perf_counter() \n",
"for i in titanic.iterrows():\n",
" titanic.loc[i[0], \"Name\"] = titanic.loc[i[0], \"Name\"].upper()\n",
"T2 = time.perf_counter() \n",
"print(\"使用for循环耗时:\", ((T2 - T1)*1000),\"ms\")\n",
"\n",
"titanic = pd.read_csv(\"titanic.csv\")\n",
"T1 = time.perf_counter() \n",
"titanic[\"Name\"] = titanic[\"Name\"].map(lambda x: x.upper())\n",
"T2 = time.perf_counter() \n",
"print(\"使用map方法耗时:\", ((T2 - T1)*1000),\"ms\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以看到,这几乎有200倍的性能提升,在面对大量的数据时,这能为我们节省大量的时间。Pandas中,类似的函数还有`apply`和`applymap`它们适用于不同的使用情景,同学们可以自行查阅。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "JBtest",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}