簡體   English   中英

`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對象並查找了所有這些屬性和方法。 文檔指出,除了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被認為是舊的,而應使用.arrayto_numpy() 此答案中的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM