首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`pandas.Series.ravel()`、`pandas.Series.to_numpy()`、`pandas.Series.values`和`pandas.Series.array`之间有什么区别?

`pandas.Series.ravel()`、`pandas.Series.to_numpy()`、`pandas.Series.values`和`pandas.Series.array`之间有什么区别?
EN

Stack Overflow用户
提问于 2022-05-12 07:15:57
回答 1查看 570关注 0票数 0

基本上这个标题概括起来了。我创建了一个虚拟pandas.Series对象,并查找了所有这些属性和方法。文档声明,除了pandas.array之外,所有这些都返回numpy.ndarray对象。那么,什么时候应该使用一种方法或一种属性呢?例如,我读过numpy.flatten()numpy.ravel()之间的一些区别,前者返回新数组,后者返回视图。pandas也是如此

代码语言:javascript
复制
import pandas as pd
s = pd.Series(range(10))
s.ravel()  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
s.to_numpy()  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
s.values  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
s.array  # <PandasArray>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-12 08:05:58

默认情况下,所有这些都返回一个视图:

代码语言:javascript
复制
import pandas as pd

s = pd.Series(range(10))
rav = s.ravel()  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
to_num = s.to_numpy()  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
values = s.values  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array = s.array  # <PandasArray>

rav[0] = 1
print('ravel', s[0])

to_num[0] = 2
print('to_numpy', s[0])

values[0] = 3
print('values', s[0])

array[0] = 4
print('array', s[0])
代码语言:javascript
复制
ravel 1
to_numpy 2
values 3
array 4

但是,to_numpy()具有copy参数(默认False),您可以使用该参数返回基础数组的完整副本:

代码语言:javascript
复制
to_num_copy = s.to_numpy(copy=True)  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

to_num_copy[0] = 5
print('to_numpy with copy', s[0])
代码语言:javascript
复制
to_numpy with copy 4

最后,当列的to_numpy()不是同构的和/或不是numpy dtype时,有时也可能返回副本。相反,如果我们希望严格避免复制,则应该使用.array

注意,.values被认为是旧的,应该使用.arrayto_numpy()。更多信息,in this answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72211476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档