python pandas loc错误

时间:2017-04-10 13:49:53

标签: python pandas loc

我有一个年龄的数据框df,我正在努力将文件分类为0和1的年龄组。

DF:

User_ID | Age
35435      22
45345      36
63456      18
63523      55

我尝试了以下

df['Age_GroupA'] = 0
df['Age_GroupA'][(df['Age'] >= 1) & (df['Age'] <= 25)] = 1

但是会收到此错误

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

为了避免它,我要去.loc

df['Age_GroupA'] = 0
df['Age_GroupA'] = df.loc[(df['Age'] >= 1) & (df['Age'] <= 25)] = 1

然而,这标志着所有年龄都是1

这就是我得到的

User_ID | Age | Age_GroupA
35435      22       1
45345      36       1
63456      18       1
63523      55       1

虽然这是目标

User_ID | Age | Age_GroupA
35435      22       1
45345      36       0
63456      18       1
63523      55       0

谢谢

3 个答案:

答案 0 :(得分:3)

您可以将布尔值掩码转换为int - True1False0

df['Age_GroupA'] = ((df['Age'] >= 1) & (df['Age'] <= 25)).astype(int)
print (df)
   User ID        Age  Age_GroupA
0    35435         22           1
1    45345         36           0
2    63456         18           1
3    63523         55           0

答案 1 :(得分:3)

由于同伴压力(@DSM),我觉得有必要细分你的错误:

df['Age_GroupA'][(df['Age'] >= 1) & (df['Age'] <= 25)] = 1

这是chained indexing/assignment

那你接下来尝试了什么:

df['Age_GroupA'] = df.loc[(df['Age'] >= 1) & (df['Age'] <= 25)] = 1
使用loc时,

格式不正确:

df.loc[<boolean mask>, cols of interest] = some scalar or calculated value
像这样:

df.loc[(df['Age_MDB_S'] >= 1) & (df['Age_MDB_S'] <= 25), 'Age_GroupA'] = 1

您也可以使用np.where

完成此操作
df['Age_GroupA'] = np.where( (df['Age_MDB_S'] >= 1) & (df['Age_MDB_S'] <= 25), 1, 0)

要在一行中执行此操作,有很多方法可以执行此操作

答案 2 :(得分:1)

这对我有用。 Jezrael已经解释过了。

 dataframe['Age_GroupA'] = ((dataframe['Age'] >= 1) & (dataframe['Age'] <= 25)).astype(int)