我目前正在重構一些代碼,我看到這兩行都在使用:
foo = df['bar'].values[0]foo = df['bar'].iloc[0]
根據我目前的理解,這兩行都做同樣的事情:檢索熊貓系列的第一個值。
他們真的一樣嗎?如果是,是否有一種方式比另一種更推薦?(由于內部細節、速度、設定值而不是獲取值時的行為等)
uj5u.com熱心網友回復:
代碼df.values實際上回傳一個numpy.array(即它可以不使用方括號使用)。
df[col].values
df[col].values[0] # 1st element of numpy array
df[col].values[1:3] # 2nd and 3rd element of numpy array
同時df.iloc是基于位置的索引以從資料框中獲取元素。iloc必須與方括號一起使用,否則您會看到錯誤。
df.iloc # Error
df.iloc[row, col] # Returns a cell, array (`Series`), matrix (`DataFrame`) based on input
細微的區別在于回傳的物件,以及幕后的實作。
iloc直接從記憶體中讀取資料并回傳輸出。
values將 aDataFrame轉換為numpy.array物件,然后從記憶體中讀取資料并回傳輸出(因此iloc速度更快)。
uj5u.com熱心網友回復:
我認為大多數時候它是相同的輸出,如果不使用日期時間,因為.values或Series.to_numpy回傳 numpy 陣列的第一個值:
df = pd.DataFrame({'bar':pd.date_range('2001', freq='Q', periods=5)})
print (df)
bar
0 2001-03-31
1 2001-06-30
2 2001-09-30
3 2001-12-31
4 2002-03-31
foo = df['bar'].to_numpy()[0]
print(foo)
2001-03-31T00:00:00.000000000
print(type(foo))
<class 'numpy.datetime64'>
foo = df['bar'].values[0]
print(foo)
2001-03-31T00:00:00.000000000
print(type(foo))
<class 'numpy.datetime64'>
foo = df['bar'].iloc[0]
print(foo)
2001-03-31 00:00:00
print(type(foo))
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387632.html
上一篇:比較兩列中的兩個資料場并得到差異
