news 2026/5/4 6:41:12

Pandas库和画图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pandas库和画图

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。

  1. 使用 +运算符直接拼接列
    适用于列中的元素都是可相加的类型(如字符串、数字),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()才能将绘制结果渲染显示出来,从而直观地呈现四种函数在相同区间内的形态差异。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!