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()也能为其他人工作?
发布于 2022-01-17 16:04:18
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的“哪里”去工作,我认为上面的方法是这样的。但是值得一提的是,熊猫申请在这里可能也会很好,用字典进行映射--就像列出的那样--另一个答案会更好。
发布于 2022-01-17 16:00:51
尝试映射值,以避免出现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' (字符串)。因此,您现在不能检查整数值。这就是为什么,在一次传递中处理数据是很重要的。
发布于 2022-01-17 16:14:18
正如其他答案所描述的,数组将在您的第一行代码之后转换为字符串,但是,您可以重新安排您的代码以一次执行所有内容,这将解决这个问题。
对于多个条件评估,您可能会发现使用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://stackoverflow.com/questions/70744100
复制相似问题