我正在處理如下所示的資料框:
df:
Site Visits Temp Type
KFC 511 74 Food
KFC 565 77 Food
KFC 498 72 Food
K&G 300 75 Gas
K&G 255 71 Gas
我想將“型別”列更改為 0-1 變數,以便我可以使用 df.corr() 來檢查相關性。
我嘗試了兩種方法,一種是制作字典并創建新列:
dict = {'Food':1, 'Gas':0}
df['BinaryType'] = df['Type'].map(dict)
然后我就可以使用 df.corr() 來檢查“訪問”和“BinaryType”之間的相關性。由于“型別”列包含字串,因此 df.corr() 不會顯示“訪問次數”和“型別”之間的相關性。
第二種方法是使用 .loc:
df.loc[df['Type']=='Food','Type'] = 1
df.loc[df['Type']!=1,'Type'] = 0
然后我在控制臺中檢查了 df,如下所示,似乎進行了就地更改。我還使用 df['Type'][0] 檢查了資料型別,它讀取了 1(我想它是整數):
Site Visits Temp Type
KFC 511 74 1
KFC 565 77 1
KFC 498 72 1
K&G 300 75 0
K&G 255 71 0
然而,這里 df.corr() 不會顯示“訪問”和“型別”之間的相關性!就好像這一欄沒有改變一樣。
您可以使用下面的代碼來重現:
df = pd.DataFrame({
'Site': {0: 'KFC', 1: 'KFC', 2: 'KFC', 3: 'K&G', 4:'K&G'},
'Visits': {0: 511, 1: 565, 2: 498, 3: 300, 4:255},
'Temp': {0: 74, 1: 77, 2: 72, 3: 75, 4:71},
'Type': {0: 'Food', 1: 'Food', 2: 'Food', 3: 'Gas', 4:'Gas'}})
# 1
dict = {'Food':1, 'Gas':0}
df['BinaryType'] = df['Type'].map(dict)
df.corr()
del df['BinaryType']
# 2
df.loc[df['Type']=='Food','Type'] = 1
df.loc[df['Type']!=1,'Type'] = 0
df.corr()
關于 Pandas .loc 如何在后臺作業的任何想法?
uj5u.com熱心網友回復:
dtype即使值都是整數,您的第二種方法實際上并沒有改變系列的。您可以看到,通過執行df.dtypeswhich 將顯示該Type列仍然是objectdtype
您需要使用 .astype(int)
或者
用 df['Type'] = np.where(df['Type'] == 'Food', 1, 0)
df.corr()在那之后運行給出
In [22]: df.corr()
Out[22]:
Visits Temp Type
Visits 1.000000 0.498462 0.976714
Temp 0.498462 1.000000 0.305888
Type 0.976714 0.305888 1.000000
uj5u.com熱心網友回復:
當您的第一種方法起作用時,您可以使用:
dict = {'Food':1, 'Gas':0}
df['Type'] = df['Type'].map(dict)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349877.html
