TypeError:' dict'使用替换映射时,对象不可调用

时间:2016-12-04 17:16:29

标签: python-2.7 pandas

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

Date       Value
19920507   1.02
19930602   1.11
19980802   6.07

我希望根据第二个数据帧(df2)重新映射Date,如下所示:

Date1         Date2
19920507      1
19930602      2
19980802      3

我正在替换第一个数据框中的Date,如下所示:

list_1=df2.Date1.tolist()
list_2=df.Date2.tolist()
replacement_map = {int(i1): int(i2) for i1, i2 in zip(list_1, list_2)}

df['Date'] = df['Date'].apply(replacement_map)

但这会返回:

 File "C:\Users\Stefano\Anaconda2_2\lib\site-packages\pandas\core\series.py", line 2220, in apply
    mapped = lib.map_infer(values, f, convert=convert_dtype)

  File "pandas\src\inference.pyx", line 1088, in pandas.lib.map_infer (pandas\lib.c:62658)

TypeError: 'dict' object is not callable

1 个答案:

答案 0 :(得分:1)

'不可调用'基本上意味着它不是函数,Series.apply接受函数 - 而不是字典。

请尝试map

df['Date'] = df['Date'].map(replacement_map)

注意:要使用map,您不必将映射转换为字典。索引为键且其值为dict值的系列也可以这样做:

df1['Date'] = df1['Date'].map(df2.set_index('Date1')['Date2'])

df1
Out: 
   Date  Value
0     1   1.02
1     2   1.11
2     3   6.07

当然,merge & join也可以实现这些目标。