df['view'] = np.where(df['view']==0, 'No view', df['view'])
df['view'] = np.where(df['view']==1, 'Mediocore', df['view'])
df['view'] = np.where(df['view']==2, 'Average', df['view'])
df['view'] = np.where(df['view']==3, 'Good', df['view'])
df['view'] = np.where(df['view']==4, 'Very good', df['view'])
我有一個房價資料集,其中“視圖”列以 1-4 的比例對視圖進行評分。我想使用此操作將它們更改為字串,但是這段代碼僅適用于第一行。
df['view'].value_counts()
-No view 4140
2 205
3 116
4 70
1 69
Name: view, dtype: int64
我如何讓 np.where() 也適用于其他人?
uj5u.com熱心網友回復:
Numpy 將在第一次呼叫時將陣列轉換為字串,這意味著列中不再有 1,而是 '1'。
此代碼將起作用:
df['view'] = np.where(df['view']==0, 'No view', df['view'])
df['view'] = np.where(df['view']=='1', 'Mediocore', df['view'])
df['view'] = np.where(df['view']=='2', 'Average', df['view'])
df['view'] = np.where(df['view']=='3', 'Good', df['view'])
df['view'] = np.where(df['view']=='4', 'Very good', df['view'])
我知道你問過如何讓 numpy 的“在哪里”作業,我認為上面是這樣。但值得一提的是,pandas apply 在這里也可以很好地作業,使用字典進行映射,其他答案會更好。
uj5u.com熱心網友回復:
嘗試使用映射值來避免 dtype 問題:
mappings = {0: 'No view', 1: 'Mediocre', 2: 'Average', 3: 'Good', 4: 'Very good'}
df['view'] = df['view'].map(mappings)
print(df)
# Output
view
0 Very good
1 No view
2 Mediocre
3 Mediocre
4 No view
5 No view
6 Average
7 No view
8 No view
9 Mediocre
我使用的設定:
import pandas as pd
import numpy as np
np.random.seed(2022)
df = pd.DataFrame({'view': np.random.randint(0, 5, 10)})
print(df)
# Output
view
0 4
1 0
2 1
3 1
4 0
5 0
6 2
7 0
8 0
9 1
更新
在第一個之后np.where,您的資料如下所示:
>>> np.where(df['view']==0, 'No view', df['view'])
array(['4', 'No view', '1', '1', 'No view', 'No view', '2', 'No view',
'No view', '1'], dtype='<U21')
剩余的值1, 2, 3, 4(整數)變成了'1', '2', '3', '4'(字串)。因此,您現在無法檢查整數值。這就是為什么一次性處理資料很重要的原因。
uj5u.com熱心網友回復:
如其他答案所述,陣列將在您的第一行代碼之后轉換為字串,但是,您可以重新安排代碼以一次執行所有內容,這應該可以解決問題。
對于多條件評估,您可能會發現使用起來更容易 numpy.select
v = df['view']
# numpy.where
df['view'] = np.where(v==0, 'No view',
np.where(v==1,'Mediocre',
np.where(v==2,'Average',
np.where(v==3,'Good',
np.where(v==4,'Very good',df['view'])))))
# numpy.select
vals = [v.eq(0), v.eq(1),v.eq(2),v.eq(3),v.eq(4)]
new_vals = ['No view','Mediocre','Average','Good','Very good']
df['view'] = np.select(vals, new_vals, default=v)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414376.html
標籤:
