簡體   English   中英

替換列中的多個值,並在 Pandas 數據框中保持其他值不變

[英]replace multiple values in a column and keep other values unchanged in pandas dataframe

我有一個如下所示的示例數據框:

df = pd.DataFrame({'name': ['red', 'orange', 'blue'],
                   'value': [22,44,66]})

    name    value
0   red     22
1   orange  44
2   blue    66

我需要用1替換red ,用2替換blue ,在列name保留orange

我使用如下地圖功能:

df.name.map({'red': 0, 'blue': 1})

我得到了這樣的結果:

    name    value
0   0.0     22
1   NaN     44
2   1.0     66

在列中, orange變為NaN

替換值的最佳方法是什么?
我不想多次使用df.name.str.replace(..)來替換許多值。 在我的真實數據中,一列中有 10 個要替換的值。 謝謝。

使用fillna修復您的代碼

df.name = df.name.map({'red': 0, 'blue': 1}).fillna(df.name)
0         0
1    orange
2         1
Name: name, dtype: object

一種方法是創建自定義dict並覆蓋__missing__

import pandas as pd
df = pd.DataFrame({'name': ['red', 'orange', 'blue'],
               'value': [22,44,66]})

class Foo(dict):
    def __missing__(self, key):
       return key
df.name.map(Foo({'red': 0, 'blue': 1}))

從文檔Series.map

當 arg 是字典時,系列中不在字典中的值(作為鍵)將轉換為 NaN。 但是,如果字典是定義缺失的 dict 子類(即提供默認值的方法),則使用此默認值而不是 NaN。

您可以使用Series.replace

print (df["name"].replace({'red': 0, 'blue': 1}))

0         0
1    orange
2         1
Name: name, dtype: object

暫無
暫無

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

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