Python数据分析教程
一、环境搭建

首先安装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中最常用、最核心的数据分析操作:数据导入导出、查看概览、行/列筛选、排序、新增列、分组聚合、数据透视表以及表格关联。掌握这些内容,足以应对大多数常规数据分析任务。如果遇到问题,欢迎评论区留言交流。
更多推荐



所有评论(0)