Pandas 是一个基于 NumPy、专为高效处理结构化数据而设计的开源 Python 数据分析库,堪称 Python 数据分析领域的核心引擎。它提供了 Series(一维带标签数组) 和 DataFrame(二维表格型数据结构) 这两种核心工具,凭借其强大的 I/O 能力可轻松读写 CSV、Excel、SQL 等多种数据源,并能高效完成数据清洗(如处理缺失值与重复值)、筛选探索(通过标签或布尔索引快速切片)、以及分组聚合(GroupBy)、合并连接(Merge)等关键任务,从而将复杂的数据操作转化为简洁直观的代码,让数据清洗、转换、聚合等分析流程变得简单易行且高效。
核心数据结构
1.Series —— 一种带标签的一维数组,可存储任意数据类型(整数、字符串、浮点数、Python 对象等),相当于 Excel 中的一列或数据库表中的单个字段,索引(标签)让数据定位更直观。
importpandasaspd s=pd.Series([1,3,5,7],index=['a','b','c','d'])2.DataFrame —— 一种带标签的二维表格型结构,由多个共享同一索引的 Series 组成,可容纳异构数据(不同列类型不同),相当于 Excel 工作表、SQL 数据表或 R 的 data.frame,是 Pandas 中最常用、最核心的数据容器。
data={'Name':['Alice','Bob'],'Age':[25,30]}df=pd.DataFrame(data)常用功能
Pandas 的数据读取与写入(I/O)功能,支持 CSV、Excel、SQL、JSON、Parquet 等主流格式,通过 pd.read_xxx()/ df.to_xxx()简洁 API,实现数据在外部源与 DataFrame 间的快速流转,自动处理编码、类型等细节,让数据加载与导出高效便捷。
读取csv文件
importpandasaspd df_1=pd.read_csv("data1.csv")df_2=pd.read_csv("data2.csv",encoding='utf8',header=None)header=None如果不写的话,会让读取文件的第一行成为表头,造成数据缺失
读取excel文件
importpandasaspd df_3=pd.read_excel("data3.xlsx")读取txt文件
importpandasaspd df_4=pd.read_table("data4.txt",sep=',',header=None)sep=‘,’:指定文件的分隔符为逗号(,)
导出文件
importpandasaspd df_1.to_csv("导出.csv",index=True,header=True)df_1.to_excel("导出.xlsx",index=True,header=True)index=True:表示导出时包含 DataFrame 的索引(行标签),默认值为 True;若设为 False,则不导出索引。
缺失值处理方式:
1.检测:用 isna()/isnull()标记缺失位置,notna()/notnull()标记非缺失值,快速定位数据“空洞”;
na=df.isnull()2.删除:用 dropna()删除含缺失值的行(axis=0,默认)或列(axis=1)
df2=df.dropna()print(df2)3.填充:用 fillna()填充缺失值,可按固定值(如 0、“未知”)、前向/后向填充
df2=df.dropna()print(df2)重复值处理:识别与去重
当数据中存在完全重复的行时,会影响分析结果的准确性,需要进行处理。
检查重复值:duplicated()
该方法返回一个与原数据等长的布尔序列(True/False),用于标记哪些行是重复的。
keep参数:控制如何定义“重复”并标记首次出现的行。
keep=‘first’(默认):除了第一次出现的行,后续重复行都被标记为 True。
keep=‘last’:除了最后一次出现的行,前面重复行都被标记为 True。
keep=False:所有重复的行(包括第一次和最后一次)都被标记为 True。
# 示例:标记所有重复行duplicates=df.duplicated(keep=False)print(duplicates)删除重复值:drop_duplicates()
该方法直接删除被 duplicated()标记为 True的行,返回一个新的 DataFrame(除非设置 inplace=True)。
keep参数:控制删除后保留哪一行。
keep=‘first’(默认):保留第一个出现的重复行,删除后续的。
keep=‘last’:保留最后一个出现的重复行,删除前面的。
keep=False:删除所有重复的行,只留下唯一的记录。
# 示例:删除所有完全重复的行,只留唯一值df_unique=df.drop_duplicates()# 示例:基于特定列('A', 'B')来检查和删除重复项df_cleaned=df.drop_duplicates(subset=['A','B'],keep='last')数据抽取:筛选、抽样与选择
数据抽取是从大型数据集中提取出我们感兴趣部分的过程,主要包括条件筛选、随机抽样和行列选择。
条件筛选:按规则提取行
使用布尔索引(Boolean Indexing)根据一个或多个条件来筛选数据。
单条件:df[df[‘列名’] > 值]
多条件:使用位运算符 &(与)、|(或),每个条件必须用括号括起来。
# 筛选 '年龄' > 30 且 '城市' == '北京' 的记录filtered_df=df[(df['年龄']>30)&(df['城市']=='北京')]抽样:随机抽取样本
用于从大数据集中随机抽取一部分进行分析,避免窥探整体。
df.sample(n=5):随机抽取 5 行。
df.sample(frac=0.5):按 50% 的比例随机抽取行。
按列选择:提取特定列
选择离散列:传入列名的列表 df[[‘列1’, ‘列2’]]
选择连续列范围:使用 .loc按标签选择 df.loc:, ‘列1’:‘列3’
按行选择:提取特定行
按位置(整数索引)选择:使用 .ilocdf.iloc0:5
按标签(索引名)选择:使用 .locdf.loc[df.index.isin([1, 3, 5])](选择索引为 1, 3, 5 的行)
数据框合并:concat()函数
concat()是 Pandas 中用于沿指定轴(行或列)拼接多个 DataFrame 的核心函数,常用于纵向堆叠(增加行)或横向拼接(增加列)。
基本使用方法:
importpandasaspdimportnumpyasnp# 创建示例数据框df_1=pd.DataFrame(np.arange(12).reshape(3,4))# 3行4列,值0-11df_2=2*df_1# 每个元素乘以2# 纵向合并(默认 axis=0,按行堆叠)new_df1=pd.concat([df_2,df_1])# df_2在上,df_1在下# 横向合并(axis=1,按列拼接)new_df2=pd.concat([df_1,df_2],axis=1)# df_1在左,df_2在右axis=0(默认):纵向拼接(沿行方向,增加行数,列数不变,要求列名一致)。
axis=1:横向拼接(沿列方向,增加列数,行数不变,要求行索引能对应)。
join参数:控制合并方式(交集 or 并集)
当使用 axis=1(横向合并) 时,可通过 join参数决定是按行索引的交集(inner)还是并集(outer)进行合并。
join=‘outer’(默认):按行索引的并集合并,缺失值填充 NaN。
join=‘inner’:仅保留行索引的交集部分,没有交集的行会被丢弃。
# 创建带自定义索引的 DataFramedf_3=pd.DataFrame(np.arange(12).reshape(3,4),index=['A','B',2])# 横向合并 - 交集(只保留两个 DataFrame 都有的索引行)new_df3=pd.concat([df_1,df_3],axis=1,join='inner')# 横向合并 - 并集(保留所有索引行,缺失值填充 NaN)new_df4=pd.concat([df_1,df_3],axis=1,join='outer')join=‘outer’:当你想保留所有原始数据,哪怕某些行在另一个表里没有对应数据。
join=‘inner’:当你只关心两个表中都有的那些行(比如按某个共同索引合并关键信息)。
数据框列的拼接(生成新列)
有时我们需要将多个列的值拼接(组合)起来,生成一个新的列,比如拼接多个字段组成一个唯一标识 ID。
- 使用 +运算符直接拼接列
适用于列中的元素都是可相加的类型(如字符串、数字),Pandas 会按列对应元素逐一相加。
# 假设 df 是你的 DataFrame,包含列 'area', 'birthday', 'ranking', 'only'# 方法1:直接使用 + (要求列内元素类型支持相加,比如都是字符串或数字)num=df['area']+df['birthday']+df['ranking']+df['only']df['id']=num# 将拼接结果赋值给新列 'id'# 方法2:如果列中包含非字符串类型,可以先转换为字符串再拼接df=df.astype(str)# 先将所有相关列转为字符串类型num=df['area']+df['birthday']+df['ranking']+df['only']df['id']=num# 拼接后的结果为字符串类型注意:如果列中包含 数字和字符串混合,或者希望拼接结果为字符串(比如生成唯一 ID),推荐先用 df[[‘col1’,‘col2’]] = df[[‘col1’,‘col2’]].astype(str)将相关列转换为字符串,再进行 +拼接。
DataFrame 本质理解
DataFrame 本质上就是一个 Excel 表格,或者说,是多个 Series(一维数据)按列拼接而成的二维表格。
每一列是一个 Series,所有列共享相同的行索引,从而构成规整的“表格结构”。
Matplotlib.pyplot:Python 数据可视化基础库
Matplotlib 是 Python 最经典且功能强大的数据可视化库,其中的 pyplot模块 提供了类似 MATLAB 的简洁绘图接口,通过简单的函数调用即可生成各类常见的统计与科学图表,是数据探索与结果展示的利器。
基本绘图功能
matplotlib.pyplot支持快速绘制多种基础图表,适用于不同场景的数据展示需求:
线图(折线图)
函数:plt.plot(x, y)
用途:展示数据随某个变量的变化趋势,适用于连续型数据。
示例函数调用:
plt.plot(x,y,color='red',marker='o')散点图
函数:plt.scatter(x, y)
用途:展示两个变量之间的关系或分布,强调离散的数据点。
示例函数调用:
plt.scatter(x,y)柱状图
函数:plt.bar(x, height)
用途:展示分类数据的大小对比,生成垂直条形图。
示例函数调用:
plt.bar(x,height)直方图
函数:plt.hist(data)
用途:展示数据的分布情况,常用于观察数据的频率分布。
示例函数调用:
plt.hist(data)图表信息设置函数
设置图表标题
函数:plt.title(‘标题’)
作用:为图表添加标题文字。
设置 X 轴标签
函数:plt.xlabel(‘X轴标签’)
作用:标注 X 轴的含义。
设置 Y 轴标签
函数:plt.ylabel(‘Y轴标签’)
作用:标注 Y 轴的含义。
显示图表
函数:plt.show()
作用:渲染并显示已绘制的图表。
示例1:绘制一个折线图
importmatplotlib.pyplotaspltimportnumpyasnp x=np.array([1,2,3,4,5])y=np.array([10,20,25,30,40])plt.plot(x,y,color='red',marker='o')plt.title('Scatter Plot Example')plt.xlabel('X Axis')plt.ylabel('Y Axis')plt.show()示例2:创建多个子图并绘制
importmatplotlib.pyplotaspltimportnumpyasnp x=np.linspace(0,10,10000)y1=np.sin(x)y2=np.cos(x)y3=np.tan(x)y4=np.sin(x**2)fig,axs=plt.subplots(2,2,figsize=(10,8))axs[0,0].plot(x,y1,'r')axs[0,0].set_title('sin(x)')axs[0,1].plot(x,y2,'g')axs[0,1].set_title('cos(x)')axs[1,0].plot(x,y3,'b')axs[1,0].set_title('tan(x)')axs[1,1].plot(x,y4,'m')axs[1,1].set_title('sin(x^2)')plt.show()这段代码利用 Matplotlib 和 NumPy 绘制了四个常见三角函数的曲线,并通过 plt.subplots(2, 2)将它们组织在 2×2 的子图网格中以便对比展示:首先用 np.linspace(0, 10, 10000)生成 0 到 10 之间均匀分布的 10000 个点作为平滑的 x 轴数据,再分别计算 sin(x)、cos(x)、tan(x)和 sin(x²)得到对应的 y 值;随后 plt.subplots(2, 2, figsize=(10, 8))创建一个 2 行 2 列、尺寸为 10×8 英寸的画布,axs数组按行列索引访问各子图,在每个子图中用 .plot()绘制相应曲线并设置颜色与标题;最后必须调用 plt.show()才能将绘制结果渲染显示出来,从而直观地呈现四种函数在相同区间内的形态差异。