news 2026/4/18 12:05:33

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/18 7:56:41

制造业数字化转型利器:TMom制造系统前端架构深度剖析

制造业数字化转型利器:TMom制造系统前端架构深度剖析 【免费下载链接】tmom 支持多厂区/多项目级的mom/mes系统,计划排程、工艺路线设计、在线低代码报表、大屏看板、移动端、AOT客户端...... 目标是尽可能打造一款通用的生产制造系统。前端基于最新的vu…

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

AutoDock-Vina分子对接终极指南:7天从零到精通实战手册

还在为复杂的分子对接操作而烦恼吗?AutoDock-Vina作为药物发现领域最强大的开源工具,其实并没有想象中那么难以掌握。本文将带你用最简单的方法,在最短时间内成为分子对接的实战专家! 【免费下载链接】AutoDock-Vina AutoDock Vin…

作者头像 李华
网站建设 2026/4/18 6:31:19

从基础到完全掌握AD第8讲 非常用功能介绍

什么叫非常用功能呢?哈哈,其实就是你这辈子可能都用不上的功能,那小崔你为什么讲呢?额。。。就好比什么呢,这个东西我们可以不用,但是我不能不讲哈哈。1.Licenses这个Licenses其实就是加载相关证书用的&…

作者头像 李华
网站建设 2026/4/18 2:45:49

HW大批量的ip自动化溯源工具

Ashro_Auto_Attribution 介绍 调用微步api实现hvv期间大批量的ip自动化溯源工作,目前只实现了 筛选高价值可溯源目标,肉鸡抓取功能。 功能逻辑 1.将IP地址放入url.txt中,通过调用微步apikey进行批量查询 2.在output/目录下生成ip_info.c…

作者头像 李华
网站建设 2026/4/17 23:28:04

终极解决方案:5步搞定iOS真机调试环境配置

终极解决方案:5步搞定iOS真机调试环境配置 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport iOS真机调试是每个iOS开发者必须面对的重要环节,但设备识别失…

作者头像 李华
网站建设 2026/4/18 2:40:36

第十一章:Timer PWM 模块 —— 给你的开发板装上“节奏大师”!

🎛️ Timer & PWM 模块 —— 给你的开发板装上“节奏大师”! ✅ 适用对象:嵌入式初学者、电机/LED 控制开发者 💡 核心目标:理解 PWM 原理 掌握硬件 vs 软件实现 熟练使用 CubeMX 配置 调用 HAL 库控制 PWM &am…

作者头像 李华