`pandas.Series.ravel()`、`pandas.Series.to_numpy()`、`pandas.Series.values` 和 `pandas.Series.array` 之间有什么区别?
What is the difference between `pandas.Series.ravel()`, `pandas.Series.to_numpy()`, `pandas.Series.values` and `pandas.Series.array`?
基本上标题总结了它。我创建了一个虚拟 pandas.Series
object 并查找了所有这些属性和方法。文档指出,除了 pandas.array
return numpy.ndarray
object 之外,所有这些都是。那有什么区别,什么时候应该使用一种方法或属性或另一种方法或属性?我读过,例如 numpy.flatten()
和 numpy.ravel()
之间存在一些差异,前者 return 是新数组,后者 return 是视图。和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>
默认情况下,所有这些return一个视图:
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
),您可以使用该参数 return 底层数组的完整副本:
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
最后,当列的 dtype
不是同类 and/or 不是 numpy dtype
时,to_numpy()
有时也可能 return 一个副本。相反,如果我们想严格避免复制,应该使用 .array
。
请注意,.values
被认为是旧的,应该使用 .array
或 to_numpy()
。更多信息 in this answer.
基本上标题总结了它。我创建了一个虚拟 pandas.Series
object 并查找了所有这些属性和方法。文档指出,除了 pandas.array
return numpy.ndarray
object 之外,所有这些都是。那有什么区别,什么时候应该使用一种方法或属性或另一种方法或属性?我读过,例如 numpy.flatten()
和 numpy.ravel()
之间存在一些差异,前者 return 是新数组,后者 return 是视图。和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>
默认情况下,所有这些return一个视图:
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
),您可以使用该参数 return 底层数组的完整副本:
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
最后,当列的 dtype
不是同类 and/or 不是 numpy dtype
时,to_numpy()
有时也可能 return 一个副本。相反,如果我们想严格避免复制,应该使用 .array
。
请注意,.values
被认为是旧的,应该使用 .array
或 to_numpy()
。更多信息 in this answer.