一、环境搭建

首先安装Python数据分析环境。推荐使用Anaconda,它预装了pandas、numpy等常用库,省去逐一安装的麻烦。在浏览器中搜索Anaconda并进入官网,点击“跳过注册”直接下载对应系统版本。下载后一路默认安装即可。

安装完成后,在系统中搜索“Anaconda Prompt”并打开,这是一个命令行工具。输入python并回车,如果出现版本信息及>>>提示符,说明安装成功。退出Python环境可输入exit()

为了方便编写代码,推荐使用VS Code编辑器。安装VS Code后,需要安装几个扩展:在扩展商店中搜索并安装“Jupyter”(配置交互式笔记本环境)、“Python”(支持Python语法)以及“中文简体包”(界面汉化)。安装完成后,按Ctrl+Shift+P打开命令面板,选择“新建Jupyter Notebook”。Jupyter笔记本允许代码按单元格逐行运行,非常适合数据分析。

新建笔记本后,需要选择内核。点击右上角的内核选择按钮,选中你已经安装的Python环境。然后开始导入本次分析所需的库:pandas(数据处理)和seaborn(数据加载和可视化)。在第一个单元格中输入以下代码并运行:

python

import pandas as pd
import seaborn as sns

二、加载与查看数据

我们使用seaborn内置的泰坦尼克号数据集(titanic),它记录了乘客的生存情况、性别、年龄、舱位等级等信息。运行以下代码加载数据:

python

titanic = sns.load_dataset('titanic')

执行后,输入titanic即可查看整个表格。常用查看方法如下:

  • titanic.shape:返回行数和列数(891行,15列)

  • titanic.head():查看前5行

  • titanic.info():查看各列的数据类型及非空值数量

  • titanic.describe():对数值型列计算均值、标准差、分位数等基本统计量

三、数据导入导出(Excel)

将当前数据导出为Excel文件,使用to_excel方法:

python

titanic.to_excel('titanic.xlsx')

导出的文件第一列会带有一个索引序号。如果不想要该列,添加参数index=False即可覆盖保存。

导入已有的Excel文件,使用read_excel

python

df = pd.read_excel('titanic.xlsx')

此时df与原来的titanic内容一致。

四、数据筛选

筛选行时,在中括号内写入条件。例如,筛选年龄大于70岁的乘客:

python

df[df['age'] > 70]

多条件筛选:使用|(或)与&(且)。注意每个条件需用小括号括起。例如,年龄大于70岁或小于10岁:

python

df[(df['age'] > 70) | (df['age'] < 10)]

年龄大于10岁且小于等于20岁:

python

df[(df['age'] > 10) & (df['age'] <= 20)]

筛选列时,单列用df['age']返回序列(Series);多列需用双中括号,例如df[['age', 'survived']]返回数据表(DataFrame)。

推荐使用loc方法,格式为df.loc[行条件, 列条件]。行条件处留空表示所有行。例如,筛选年龄大于70岁的乘客,并只查看性别和年龄两列:

python

df.loc[df['age'] > 70, ['sex', 'age']]

五、排序

使用sort_values方法。例如,按年龄升序排序:

python

df.sort_values('age')

空值会排到最后。若要降序,添加ascending=False。先用dropna去掉年龄空值:

python

df.dropna(subset=['age']).sort_values('age', ascending=False)

六、新增列

新增一列判断是否为儿童(年龄小于18岁):

python

df['is_child'] = df['age'] < 18

新列会添加到表格末尾。也可以基于多个列做运算,例如计算家庭成员总数:父母子女数量(parch)加上兄弟姐妹数量(sibsp)再加1(自己):

python

df['family_size'] = df['sibsp'] + df['parch'] + 1

七、分组聚合(groupby)

分组聚合是pandas的核心功能。例如,按性别(sex)分组,计算存活(survived)的总和:

python

df.groupby('sex')['survived'].sum()

返回结果为Series。若用双中括号df.groupby('sex')[['survived']].sum()则返回DataFrame。

按多个列分组,例如按性别和舱位等级(class)分组,计算存活总和:

python

df.groupby(['sex', 'class'])['survived'].sum()

此时性别和舱位会成为索引(层次化索引)。若想恢复为普通列,使用reset_index()

分组后还可计算平均值。例如,按性别和舱位计算年龄的平均值:

python

df.groupby(['sex', 'class'])['age'].mean()

八、数据透视表

数据透视表相当于图形化的分组聚合。语法:指定行、列、值、聚合函数。例如,行放性别,列放舱位等级,值放存活,聚合方式为求和:

python

pd.pivot_table(df, index='sex', columns='class', values='survived', aggfunc='sum')

九、表格关联(merge)

案例:计算每个性别的存活率。需要两步:先统计每个性别的存活人数,再统计每个性别的总人数,然后将两个表格关联。

第一步,按性别统计存活人数并重置索引:

python

survived = df.groupby('sex')['survived'].sum().reset_index()

第二步,按性别统计总人数(计数),并重置索引:

python

total = df.groupby('sex')['survived'].count().reset_index()

第三步,关联两个表,关联字段为sex

python

merged = survived.merge(total, on='sex')

此时两表中都有survived列,会自动重命名为survived_x(左表)和survived_y(右表)。使用rename方法重命名:

python

merged = merged.rename(columns={'survived_x': 'survived_count', 'survived_y': 'total_count'})

第四步,新增存活率列:

python

merged['survival_rate'] = merged['survived_count'] / merged['total_count']

结果显示:女性存活率约74%,男性约19%。

十、总结

以上介绍了pandas中最常用、最核心的数据分析操作:数据导入导出、查看概览、行/列筛选、排序、新增列、分组聚合、数据透视表以及表格关联。掌握这些内容,足以应对大多数常规数据分析任务。如果遇到问题,欢迎评论区留言交流。

更多推荐