基本上这个标题概括起来了。我创建了一个虚拟pandas.Series对象,并查找了所有这些属性和方法。文档声明,除了pandas.array之外,所有这些都返回numpy.ndarray对象。那么,什么时候应该使用一种方法或一种属性呢?例如,我读过numpy.flatten()和numpy.ravel()之间的一些区别,前者返回新数组,后者返回视图。pandas也是如此
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>发布于 2022-05-12 08:05:58
默认情况下,所有这些都返回一个视图:
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])ravel 1
to_numpy 2
values 3
array 4但是,to_numpy()具有copy参数(默认False),您可以使用该参数返回基础数组的完整副本:
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])to_numpy with copy 4最后,当列的to_numpy()不是同构的和/或不是numpy dtype时,有时也可能返回副本。相反,如果我们希望严格避免复制,则应该使用.array。
注意,.values被认为是旧的,应该使用.array或to_numpy()。更多信息,in this answer。
https://stackoverflow.com/questions/72211476
复制相似问题