如何在 Pandas DF 中将具有特定值的特定列设置为新值?

How do you set a specific column with a specific value to a new value in a Pandas DF?

我导入了一个包含两列 ID 和 Bee_type 的 CSV 文件。 bee_type 有两种类型 - 大黄蜂和蜜蜂。我正在尝试将它们转换为数字而不是名称;即它说 1 而不是大黄蜂。

但是,我的代码将所有内容都设置为 1。如何保持 ID 列的原始值并仅更改 bee_type 列?

# load the labels using pandas
labels = pd.read_csv("bees/train_labels.csv")

#Set bumble_bee to one
for index in range(len(labels)):
    labels[labels['bee_type'] == 'bumble_bee'] = 1

如果只有 2 个可能的值存在,我相信你需要 map 字典:

labels['bee_type'] = labels['bee_type'].map({'bumble_bee': 1, 'honey_bee': 2})

另一种解决方案是使用 numpy.where - 按条件设置值:

labels['bee_type'] = np.where(labels['bee_type'] == 'bumble_bee', 1, 2)

您的代码有效,但为了提高性能,请稍微修改一下 - 删除循环并添加 loc:

labels.loc[labels['bee_type'] == 'bumble_bee'] = 1
print (labels)
   ID   bee_type
0   1          1
1   1  honey_bee
2   1          1
3   3  honey_bee
4   1          1

示例:

labels = pd.DataFrame({
    'bee_type': ['bumble_bee','honey_bee','bumble_bee','honey_bee','bumble_bee'],
    'ID': list(range(5))
})
print (labels)
   ID    bee_type
0   0  bumble_bee
1   1   honey_bee
2   2  bumble_bee
3   3   honey_bee
4   4  bumble_bee

labels['bee_type'] = labels['bee_type'].map({'bumble_bee': 1, 'honey_bee': 2})
print (labels)
   ID  bee_type
0   0         1
1   1         2
2   2         1
3   3         2
4   4         1

据我了解,您想将名称转换为数字。如果是这种情况,请尝试使用 LabelEncoder。可以找到详细的文档sklearn LabelEncoder