pandas - 替换列中的值

时间:2017-03-30 18:48:40

标签: pandas

我有一个像这样的数据帧:

            ID_USER  CODE
0          433805  11.0
24          5448   44.0
48          3434   11.0
72          34434  11.0
96          3202   33.0
120         23766  33.0
153         39457  44.0
168         4113   33.0
172         3435   13.0
374         34093  11.0

我尝试将'CODE'列中的值替换为其他值。

11.0 and 44.0 -> 1
33.0 -> 0
all other -> 5

所以我做了以下其他事情:

df['CODE'] = df.apply(lambda s:func1(s))


def func1(x):
    if (x['CODE'] == 11.0) or (x['CODE'] == 44.0):
        return 1
    elif (x['CODE'] == 33.0):
        return 0
    else:
        return 5

我收到了这个错误:

KeyError: ('NTL', u'occurred at index ID_UC')

如何解决我的问题?

2 个答案:

答案 0 :(得分:3)

您可以使用np.where

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);

答案 1 :(得分:2)

简短回答是您忘记指定要应用的轴。默认情况下,apply将遍历每一列。您的函数正在查找x['CODE'],因此可以安全地假设您的意思是迭代行

df.apply(lambda s:func1(s), axis=1)

0      1
24     1
48     1
72     1
96     0
120    0
153    1
168    0
172    5
374    1
dtype: int64

你可以用

来缩短它
df.apply(func1, 1)

那就是说,我会改进你的功能,假设你正在迭代pd.Series而不是pd.DataFrameapply的行到目标列。

def func2(x):
    return 1 if (x == 11) or (x == 44) else 0 if (x == 33) else 5

df.CODE.apply(func2)

更好的是,我喜欢使用map + lambda

m = {11: 1, 44: 1, 33: 0}

df.CODE.map(lambda x: m.get(x, 5))

一起

df.assign(CODE=df.CODE.map(lambda x: m.get(x, 5)))

     ID_USER  CODE
0     433805     1
24      5448     1
48      3434     1
72     34434     1
96      3202     0
120    23766     0
153    39457     1
168     4113     0
172     3435     5
374    34093     1