簡體   English   中英

如何在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM