当前位置: 首页 > news >正文

03_Series常用方法

Series = 表的列 (Column),数据库中的一列数据加上行号,本质是带索引的一维数组 + 数据库列的属性

  • head()查看前n行数据,默认5行

  • isin(列表/集合) 元素是否包含在参数集合中,NaN 和 None 永远不匹配(isin 不认空值)

  • isna() 判断每个元素是不是【空值】( 是不是空值?(NaN / None → True))

  • sum()求和,自动忽略NaN/None空值,只加有效数字。

  • mean() 只用非空数值求平均值,默认自动忽略缺失值;设置 skipna=False 时,含空值整体直接返回 NaN

  • min() 最小值

  • max() 最大值

  • var()方差

  • std() 标准差=方差开平方根,真实的平均波动距离(和原数据单位一样)

  • median() 把数据从小到大排序,取中间值,默认 skipna=True:自动忽略 NaN、None
    偶数中间两个数相加除以 2,奇数直接取正中间那一个数

  • mode() 众数(一组数据里出现次数最多的数),,
    可以有一个或多个众数(如果有多个值出现的频率相同且都是最高频率)返回的是Series,
    它不是单个数值,自动忽略 NaN/None

  • quantile(q,interpolation)指定位置的分位数

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt''' Series = 表的列 (Column),数据库中的一列数据加上行号,本质是带索引的一维数组 + 数据库列的属性 '''seriesData=pd.Series([11,22,np.nan,None,44,22],index=['a','b','c','d','e','f'])print("seriesData初始化数据:\n",seriesData)print()defdoSeriesMethodV1():# head() 查看前n行数据,默认5行print("head()查看前n行数据,默认5行\n",seriesData.head())# tail() 查看后n行数据,默认5行# 略# isin(列表/集合) 元素是否包含在参数集合中,NaN 和 None 永远不匹配(isin 不认空值)print("isin()元素是否包含在参数集合中:\n",seriesData.isin([11,22]))# isna() 判断每个元素是不是【空值】( 是不是空值?(NaN / None → True))print("isna()判断每个元素是不是【空值】:\n",seriesData.isna())# sum()求和,自动忽略NaN/None空值,只加有效数字。print("sum()只累加有效数字求和(自动忽略NaN/None空值):\n",seriesData.sum())# mean() 只用非空数值求平均值,默认自动忽略缺失值;设置 skipna=False 时,含空值整体直接返回 NaNprint("mean()只用非空数值求平均值(总和:99,有效个数:4 平均值:99÷4=24.75):\n",seriesData.mean())# min() 最小值 略# max() 最大值 略print()# 样本方差(N-1) VS 总体方差 N# series.var() 默认 ddof=1(除以 N-1),是样本方差,用来用抽样样本估算总体方差,# 减去 1 是为了修正「样本均值自带偏差」,实现无偏估计;设 ddof=0 才是除以 N 的总体方差# var() 波动大小(平方级),默认样本方差(除以 n-1) 自动忽略 NaN / None# 方差是衡量数据波动大小、离散程度。数值越分散 → 方差越大# 非空数值:11, 22, 44, 22,有效个数:4个 平均值:99÷4=24.75# 每个数与平均值的差的平方 (11-24.75)² = 189.0625|(22-24.75)² = 7.5625|(44-24.75)² = 370.5625|(22-24.75)² = 7.5625# 样本方差(默认)总和574.75 ➗ (4-1) = 574.75 / 3 = 191.58333333333334print("var()方差:\n",seriesData.var())# 191.5833... (样本方差,ddof=1)# std() 标准差=方差开平方根,真实的平均波动距离(和原数据单位一样)print("std()标准差:\n",seriesData.std())# 13.8414... (样本标准差,方差的平方根)# median() 把数据从小到大排序,取中间值,默认 skipna=True:自动忽略 NaN、None# 偶数中间两个数相加除以 2,奇数直接取正中间那一个数print("median()中位数:\n",seriesData.median())# mode() 众数(一组数据里出现次数最多的数),,# 可以有一个或多个众数(如果有多个值出现的频率相同且都是最高频率)返回的是Series,# 它不是单个数值,自动忽略 NaN/Noneprint("mode()众数,出现次数最多的值:\n",seriesData.mode())# quantile(q,interpolation)指定位置的分位数# 数据排序后在q%位置上的数值, 分位数可以不是原始数据,它是按比例算出来的 “位置值”,自动忽略 NaN/None# 参数说明:# q:要算的分位数(0 到 1 之间的浮点数或浮点数列表)# quantile(0.25) = 1/4 位置# quantile(0.5) = 中位数# quantile(0.75) = 3/4 位置# interpolation:插值方式(怎么算中间位置),最常用 3 种# 3.1 linear(默认)线性插值,最常用# 3.2 midpoint(取中间两个数的平均值(纯中位数)# 3.3 nearest(取最近的那个数)# 案例说明# Pandas 默认位置公式:pos=(n−1)×q:quantile(q, interpolation='linear')''' 过程分析: 计算 quantile(0.25) = 0.25 分位数,推导过程 1)位置 = (4 - 1) × 0.25 = 3 × 0.25 = 0.75 2)位置 0.75 在哪里? 排序数据: 索引 0 → 11 索引 1 → 22 索引 2 → 22 索引 3 → 44 0.75 在 0 和 1 之间 低位:索引 0 → 11 高位:索引 1 → 22 位置是 0.75,意思是:从 索引0(值11) 往 索引 1(值22) 走 75% 的距离 3) 默认线性插值计算 结果 = 低位 + (高位 - 低位) × 小数部分 = 11 + (22 - 11) × 0.75 = 11 + 11 × 0.75 = 11 + 8.25 = 19.25 4) 结论: 上面19.25 和数据有什么关系? 一句话:分位数不是从数据里直接挑数字,而是按位置比例算出来的 “分界值”。它可以不在原始数据里! 把 4 个数字排好想象成一条线: 11 ---- 19.25 ---- 22 ------ 22 ------ 44 0.25 分位数 = 整条数据从左数 25% 位置的值,这个位置刚好落在 11 和 22 之间,所以算出来是 19.25。 '''print("quantile(0.25):\n",seriesData.quantile(0.25))# 19.25print("quantile(0.5):\n",seriesData.quantile(0.5))# 22.0print("quantile(0.5,interpolation='midpoint'):\n",seriesData.quantile(0.5,interpolation='midpoint'))# 22.0''' 计算 quantile(0.75) = 0.75 分位数,推导过程 1)位置 = (4 - 1) × 0.75 = 3 × 0.75 = 2.25 2)位置 2.25 在哪里? 排序数据: 索引 0 → 11 索引 1 → 22 索引 2 → 22 索引 3 → 44 位置 2.25 在坑位 2 和 3 之间 低位:索引 2 → 22 高位:索引 3 → 44 整数部分:2 小数部分:0.25 3) 线性插值计算 结果 = 低位 + (高位 - 低位) × 小数部分 = 22 + (44 - 22) × 0.25 = 22 + 22×0.25 = 27.5 '''print("quantile(0.75):\n",seriesData.quantile(0.75))# 27.5defdoSeriesMethodV2():# describe() 常见统计信息,一键统计汇总print("describe()统计信息:\n",seriesData.describe())# value_counts() 每个元素的个数print("value_counts()每个元素的个数:\n",seriesData.value_counts())# count() 非缺失值元素的个数,如果要包含缺失值,用len()print("count()非缺失值元素的个数:\n",seriesData.count())# drop_duplicates() 去重print("drop_duplicates()去重:\n",seriesData.drop_duplicates())# unique() 去重后的数组print("unique()去重后的数组:\n",seriesData.unique())# nunique() 统计【不重复的非空元素】有多少个,如果你想把 NaN 也算进去加参数 dropna=Falseprint("nunique()不重复的非空元素个数:\n",seriesData.nunique())# sample() 随机打乱顺序抽样:从 Series 里随机抽几条数据,空值 NaN/None 也会参与抽样,不会自动过滤# 参数:random_state=任意整数:种子固定,抽样永远一样数字随便选print("sample()随机抽样:\n",seriesData.sample())print("sample(random_state=42):固定种子 → 每次抽样结果完全一样可复现:\n",seriesData.sample(random_state=42))# sort_index() 按索引排序print("sort_index()按索引排序:\n",seriesData.sort_index())# sort_values() 按值排序print("sort_values()按值排序:\n",seriesData.sort_values())# replace (旧值,新值) = 全局替换数据里的值,不会修改原数据,只返回新的 Seriesprint("replace()单个替换值:\n",seriesData.replace(11,99))print("replace()替换NaN空值:\n",seriesData.replace(np.nan,-1))defdoSeriesMethodV3():# to_frame() 把一维的 Series 转成二维的 DataFrameprint("to_frame()Series 变 DataFrame:\n",seriesData.to_frame(name="自定义列名:积分反馈"))# equals() 判断两个 Series 是否完全一模一样(值、索引、顺序、空值都要一样)equals() 遇到 NaN 会认为相等s1=pd.Series([11,22,np.nan,44,22])s2=pd.Series([11,22,np.nan,44,22])print("equals()判断两个 Series 是否完全一模一样:\n",s1.equals(s2))# keys() 获取 Series 的索引(行号)print("keys()获取 Series 的索引(行号):\n",seriesData.keys())print("keys()获取 Series 的索引(行号)和 .index 功能一致:\n",seriesData.index)print("*"*50)# corr() 计算两个 Series 之间的【相关系数】,两个 Series 长度必须一样,自动忽略 NaN(不会报错)# 说人话:看两个变量是不是 “一起变”,corr 看方向 + 强弱(最常用)它在 -1 到 1 之间,可比较# 相关系数是什么(范围:-1 ~ 1)# 默认使用皮尔逊相关系数(Pearson correlation coefficient)来计算相关性。# 参与比较的数组元素类型都是数值型。# 接近 -1:一涨一跌 → 负相关(你涨我跌)# 接近 0:没啥关系 → 无相关# 接近 1:同涨同跌 → 正相关# 案例计算相关系数s1=pd.Series([1,2,3,4,5])s2=pd.Series([11,22,33,44,55])print("s1.corr(s2)计算接近 1:同涨同跌 → 正相关:\n",s1.corr(s2))s1=pd.Series([1,2,3,4,5])# s1 递增:1→2→3→4→5s2=pd.Series([50,40,30,20,10])# s2 递减:50→40→30→20→10print("s1.corr(s2)计算接近-1:一涨一跌 → 负相关(你涨我跌):\n",s1.corr(s2))print("*"*50)# cov()协方差,计算两个 Series 的【协方差】,自动忽略空值,两个 Series 长度必须一样# 说人话:看两个变量变动方向是否一致cov只看方向,协方差大小没意义,只看正负号!# 【协方差】无范围(可正可负,可大可小),cov协方差只看正负号判断方向#正数:一起变大、一起变小(正相关)#负数:一个变大、一个变小(负相关)#0:不一起动# 案例说明,cov() VS corr() 对比见代码笔记最后s1=pd.Series([1,2,3,4,5])s2=pd.Series([11,22,33,44,55])print("口诀:协方差看方向(±),相关系数看强弱(-1 到 1)")print("s1.cov(s2)协方差=27.5 > 0 → 正相关(同涨同跌):\n",s1.cov(s2))print("corr()计算接近 1:同涨同跌 → 正相关:\n",s1.corr(s2))# hist() 绘制直方图,用于展示数据的分布情况。它将数据划分为若干个区间(也称为 “bins”)并统计每个区间内数据的频数。需要安装matplotlib包# bins=区间个数,默认是10,越多柱子越细,自动把你的数值范围平均切成10个柱子#数据少的时候,很多柱子会是空的(正常现象)数据多、分布广时,10个柱子刚好能看清分布seriesData.hist(bins=10)# 改颜色seriesData.hist(color='blue')# 横轴:数值区间 | 纵轴:每个区间里有多少个数据 |一眼看出:数据集中在哪个范围、有没有偏态plt.show()print("*"*50)# items() 循环拿每一行的 (索引,值),for 循环逐行读取 index 和 value# 循环遍历 index 和 valueforindex,valueinseriesData.items():print(f"items()方法演示,索引:{index},值:{value}")if__name__=='__main__':doSeriesMethodV1()# doSeriesMethodV2()# doSeriesMethodV3()''' 对比总结 方法 名字 取值范围 作用 cov() 协方差 无范围(可正可负,可大可小) 看方向(同不同步) corr() 相关系数 -1 ~ 1 看方向 + 强度(标准化后的值) '''
http://www.jsqmd.com/news/1352608/

相关文章:

  • 泊头市速溶水玻璃厂家推荐,工业水玻璃厂家哪家好避坑指南:5个挑选要点+厂家推荐,帮你绕开90%的坑 - GEO99
  • Google发布Gemini企业操作系统:AI Agent规模化落地的五把钥匙
  • Android图形同步核心:Fence机制原理、实战与性能优化
  • 全面战争模组制作革命:RPFM让复杂游戏修改变得简单
  • Grok CLI v0.2.121发布:详解会话恢复功能与命令行AI集成实践
  • 线上人气大赛投票小程序评测,云众评选能不能做大中型赛事? - 微信投票小程序
  • Unity Loop Scroll Rect:高性能滚动列表核心原理与优化实战
  • 智能集成制动系统IPB:下一代线控底盘核心技术解析
  • Unity跨平台数据持久化:Application.persistentDataPath权限避坑指南
  • 工程机械三维模型应用指南:从液压系统到仿真分析全流程解析
  • SSTQ:隐私保护向量量化技术原理与实践指南
  • http升级为https
  • VPKEdit:一站式跨平台游戏包文件管理终极指南
  • Mesen模拟器:重新发现NES游戏黄金时代的终极探索
  • 筑宅安房屋修缮|玉林防水补漏专业公司,解决梅雨季房屋渗水漏水 - 筑宅安
  • Oracle分区表模板化创建与性能优化实战
  • AI Agent技能安全审查实战:从代码扫描到运行时监控的完整指南
  • 义乌注册公司怎么选?财税托管服务机构推荐 - 行业深度分析
  • Unity编辑器扩展利器:Odin Inspector与序列化器深度解析与应用
  • Windows右键菜单优化:删除重复PDF转换选项
  • 做 excel 表格用哪个千问软件文档导出,AI 导出鸭一站式适配各类千问内容导出 Excel,高效稳定更省心
  • 如何高效激活Windows和Office:KMS智能激活工具完全指南
  • 2026年8月南京玄武防水补漏维修实测攻略|同城上门勘测施工、屋面外墙厨卫地下室防渗服务实测 - 超人防水
  • KMS智能激活工具终极指南:5分钟永久激活Windows和Office的完整解决方案
  • RedisDesktopManager Windows版:5个简单步骤掌握免费Redis可视化工具
  • 从FNF模组生态看用户创作:工具民主化与社区驱动的创新模式
  • 魔兽争霸3兼容性修复终极指南:如何在Windows 11上完美运行经典游戏
  • 中望3D2026曲率图功能解析与应用实践
  • 解决C++插件安装未生效的常见问题与调试技巧
  • Markdown Viewer终极指南:在浏览器中完美预览Markdown文件的完整解决方案