news 2026/4/15 12:53:40

pandas创建Series和DataFrame、理解numpy

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pandas创建Series和DataFrame、理解numpy

一、创建Series对象

官网链接:
https://pandas.pydata.org/docs/reference/api/pandas.Series.html

data可以是类数组、可迭代、字典或者标量值

标量值(Scalar)是数据结构中最基础、不可再分的单一数据元素,它只包含一个数值(如数字、字符或布尔值),没有方向或内部结构。

(1)如果用字典,字典的键就是行索引

d={'a':1,'b':2,'c':3}ser=pd.Series(data=d)print(ser)


(2)如果不用字典的键,重新定义index,则用重新定义的索引,但结果全是NaN

Note that the Index is first build with the keys from the dictionary.

After this the Series is reindexed with the given Index values, hence we get all NaN as a result

d={'a':1,'b':2,'c':3}ser=pd.Series(data=d,index=['x','y','z'])print(ser)


(3)使用数组

r=[1,2]ser=pd.Series(r,copy=False)


Q:copy = False在这里什么作用?
官网说:

Due to input data type the Series has a copy of the original data even though copy=False, so the data is unchanged.

尽管copy为False(不拷贝),原数据不受影响

copy=False 的生效前提:输入数据是 “可直接复用的同构数组”

Q:ndarray-like数据是什么意思?
A:ndarray-like(类 ndarray)数据 是一个通用术语,指可以被安全地转换为 NumPy 多维数组(ndarray)的对象,其核心特征是支持被 np.asarray() 或 np.array() 函数转换为标准 ndarray,且转换过程是高效、无歧义的。
Q:可以被转为ndarray的数据类型有哪些?
A:
一、内置基础类型

注意:

  • 单个字符串会被转换为0 维数组或字符数组(取决于 NumPy 版本);
  • 长度不一致的字符串序列(如 [“a”, “abc”])会被转换为 object 类型数组(存储字符串对象引用)。

二、内置容器类型

关键:

  • 字典直接转换无实际数值意义,通常会用 np.array(list(dict.keys())) 或 np.array(list(dict.values())) 提取键 / 值转换。

三、NumPy 及科学计算库的数组 / 类数组类型
这类类型本身就是为数值计算设计的,转换时高效且无数据丢失,也是 Pandas 中 copy=False 生效的核心场景。

总计:只要是能被 NumPy 解析为 “数据集合” 的对象,都能转换为 ndarray,但只有同构的数值 / 布尔序列转换后才有实际的数值计算价值

Q:所以用列表创建Series对象会发生什么?
A:Pandas的Series底层依赖NumPy数组存储数据(这是 Pandas 高效计算的基础),而要将列表转换为 Series,必须先把列表中的元素提取出来,构建一个新的 NumPy 数组。这个列表 → NumPy 数组的转换过程是强制的,无论 copy 参数如何设置,都需要创建新的内存块来存储数值,因此必然产生数据副本。
Q:数据副本?
A:数据副本(Copy) 指的是在内存中创建一份与原始数据完全独立的新数据—— 副本和原数据占据不同的内存地址,修改副本的内容不会影响原始数据,反之亦然。与之相对的是视图(View)(或引用),视图只是对原始数据的另一个 “访问窗口”,共享同一块内存,修改视图会直接反映到原始数据上。

# 输入是列表(会复制)r_list=[1,2]ser_list=pd.Series(r_list,copy=False)r_list[0]=100print(r_list)print(ser_list)# 列表被修改,Series对象不被修改ser_list.loc[0,0]='修改'print(r_list)# Series对象修改,原列表不被修改print(ser_list)

Q:写不写copy,用列表创建,效果一样的呀?不是说列表被转为numpy数组了吗?copy对numpy数组是起作用的呀?
A:效果一致,因为列表转为numpy数组的过程中,会创建原始列表数据的副本,修改原列表不会影响 Series,修改 Series 也不会影响原列表。但这并不意味着 copy 参数完全无意义,而是其作用被列表到 NumPy 数组的强制转换过程覆盖了。copy对numpy数组起作用:

只是,针对最终的 “Series 与原列表的关系” 来说,这两种情况的结果是一样的:Series 的数据和原列表完全独立

(4)使用numpy数组创建Series对象

# 输入是NumPy数组(copy=False生效,复用内存)r_np=np.array([1,2])ser_np=pd.Series(r_np,copy=False)r_np[0]=100print(ser_np)# 输出:0 100\n1 2(原数组修改影响Series)

如果传入的数据不停变化,想两边同步,可以copy=False(我改你也改)
如果不想同步,想分开,copy=True
默认,copy = False

二、numpy

(一)了解

  1. NumPy(Numerical Python)是 Python 中用于科学计算的核心库,专门为大规模数值数组处理和高效数学运算设计。它的核心是提供了多维数组对象(ndarray),并配套了大量优化的数学函数(如线性代数、傅里叶变换、随机数生成等),解决了 Python 原生列表在数值计算中效率低下的问题。
  2. Python 原生列表:适合通用的、异构的元素存储(如[1, “a”, True]),但数值计算慢、内存利用率低。NumPy 的 ndarray:专为同构数值数据设计,是实现高效数值计算的基础,也是Pandas、Matplotlib、SciPy 等数据分析库的底层依赖。
  3. NumPy 数组(ndarray)的连续存储,指的是数组的元素在内存中占据一块连续的、固定大小的内存区域,这是它与 Python 原生列表最核心的区别之一。

(二)对比

  1. Python 的列表(list)是异构可变容器,其存储方式是“引用存储”(也叫 “指针存储”)
  2. 列表本身只存储一系列指向实际元素的引用(指针),这些引用在内存中是连续的,但实际的元素可能分散在内存的不同位置。
  3. Python 原生列表:适合通用的、异构的元素存储(如[1, “a”, True]),但数值计算慢、内存利用率低

普通数据结构(列表)是引用,修改后原数据不一定变;而 NumPy 的视图修改会影响原数据
核心:看修改的是‘引用指向’还是‘内存中的数值本身’”,以及“是否共享同一块内存区域”(具体情况具体分析)

三、创建DataFrame



参考例子:

(1)字典创建

d={'col1':[1,2],'col2':[3,4]}df=pd.DataFrame(data=d)print(df)

(2)根据Series对象创建

ser=pd.Series([1,2,3],index=["a","b","c"])df=pd.DataFrame(data=ser,index=["a","c"])print(df)


(3)传入数据,指定行索引,列索引

df=pd.DataFrame([1,2,3],index=["a","b","c"],columns=["x"])print(df)

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

ZenTimings终极指南:免费监控AMD Ryzen性能的完整解决方案

ZenTimings终极指南:免费监控AMD Ryzen性能的完整解决方案 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings ZenTimings是一款专门为AMD Ryzen处理器用户设计的免费性能监控工具,通过直观的界面实时显示CPU…

作者头像 李华
网站建设 2026/4/14 8:17:52

如何快速获取网盘真实下载地址:面向新手的完整指南

如何快速获取网盘真实下载地址:面向新手的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用,去推广&#xf…

作者头像 李华
网站建设 2026/4/12 19:58:49

Windows Defender移除工具终极指南:一键禁用系统安全组件

Windows Defender移除工具终极指南:一键禁用系统安全组件 【免费下载链接】windows-defender-remover 项目地址: https://gitcode.com/gh_mirrors/win/windows-defender-remover Windows Defender Remover是一款专为Windows系统设计的实用工具,能…

作者头像 李华
网站建设 2026/4/13 20:28:28

跨平台直播聚合终极指南:打造一站式观看体验

跨平台直播聚合终极指南:打造一站式观看体验 【免费下载链接】dart_simple_live 简简单单的看直播 项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live 想要在手机、电脑、电视上无缝观看各大平台直播吗?Simple Live 这款开源工…

作者头像 李华
网站建设 2026/4/15 12:09:10

三维建模新突破:用Manim打造惊艳的DNA螺旋动画效果

还在为生物分子可视化发愁?掌握Manim框架的3D建模技巧,只需简单几步就能创建专业级的DNA双螺旋动画!读完这篇教程,你将学会三维螺旋路径生成、遗传信息动态展示等核心技能,让抽象的生物学概念变得生动直观。 【免费下载…

作者头像 李华
网站建设 2026/4/8 11:02:38

SMP语言基础知识-应用系统的需求是啥?是应用需求!

上篇文章介绍了需求、软件开发需求的通俗概念,也对软件开发需求进行了分类,那么应用系统的需求到底是啥,有啥特点。 本期我们就来谈谈应用系统需求。 一、什么是应用系统的需求 应用系统是谁提出来的?当然是用户提出的&#xff01…

作者头像 李华