我有一个简单的数据帧如下所示:
我想从“第一赛季”列中选择所有的值,并将那些超过1990年的值替换为1。在这个例子中,只有Baltimore Ravens将1996替换为1(保持其余数据不变)。
我使用了以下方法:
df.loc[(df['First Season'] > 1990)] = 1
但是,它将用1替换该行中的所有值,而不仅仅是“First Season”列中的值。
如何替换这一列的值?
我有一个简单的数据帧如下所示:
我想从“第一赛季”列中选择所有的值,并将那些超过1990年的值替换为1。在这个例子中,只有Baltimore Ravens将1996替换为1(保持其余数据不变)。
我使用了以下方法:
df.loc[(df['First Season'] > 1990)] = 1
但是,它将用1替换该行中的所有值,而不仅仅是“First Season”列中的值。
如何替换这一列的值?
当前回答
有点晚了,但仍然-我更喜欢在以下地方使用numpy:
import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])
其他回答
df['First Season'].loc[(df['First Season'] > 1990)] = 1
奇怪的是没有人知道这个答案,你的代码中唯一缺少的部分是df之后的['First Season'],只需删除里面的花括号。
我们可以用以下语法更新df中的First Season列:
df['First Season'] = expression_for_new_values
要映射First Season中的值,我们可以使用pandas的.map()方法,语法如下:
data_frame(['column']).map({'initial_value_1':'updated_value_1','initial_value_2':'updated_value_2'})
你也可以使用mask替换满足条件的值:
df['First Season'].mask(lambda col: col > 1990, 1)
df.loc[df['First season'] > 1990, 'First Season'] = 1
解释:
df。Loc有两个参数,'行索引'和'列索引'。我们检查“First season”列下的每一行值是否大于1990,然后将其替换为1。
对于单一条件,即。('employrate') > 70)
country employrate alcconsumption
0 Afghanistan 55.7000007629394 .03
1 Albania 51.4000015258789 7.29
2 Algeria 50.5 .69
3 Andorra 10.17
4 Angola 75.6999969482422 5.57
用这个:
df.loc[df['employrate'] > 70, 'employrate'] = 7
country employrate alcconsumption
0 Afghanistan 55.700001 .03
1 Albania 51.400002 7.29
2 Algeria 50.500000 .69
3 Andorra nan 10.17
4 Angola 7.000000 5.57
因此这里的语法是:
df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]
对于多种情况,即。(df['employrate'] <=55) & (df['employrate'] > 50)
用这个:
df['employrate'] = np.where(
(df['employrate'] <=55) & (df['employrate'] > 50) , 11, df['employrate']
)
out[108]:
country employrate alcconsumption
0 Afghanistan 55.700001 .03
1 Albania 11.000000 7.29
2 Algeria 11.000000 .69
3 Andorra nan 10.17
4 Angola 75.699997 5.57
因此这里的语法是:
df['<column_name>'] = np.where((<filter 1> ) & (<filter 2>) , <new value>, df['column_name'])