[英]What is the difference between `pandas.Series.ravel()`, `pandas.Series.to_numpy()`, `pandas.Series.values` and `pandas.Series.array`?
基本上標題總結了它。 我創建了一個虛擬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>
默認情況下,所有這些都返回一個視圖:
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
最后,當列的dtype
不是同質的和/或不是numpy dtype
dtype 時, to_numpy()
有時也可能返回一個副本。 相反,如果我們想嚴格避免復制,應該使用.array
。
請注意, .values
被認為是舊的,而應使用.array
或to_numpy()
。 此答案中的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.