Pandas - 将列值与字典中的值进行比较

3

我有一个字典

d = {1:a,2:a}

我还有一个名为“df”的pandas数据框。
0 x y
1 1 10
2 2 56

由于某种原因,我无法将x值与字典键匹配起来。
for index, row in df.iterrows():
    for x,y in d.items():
        if row['x'] == x:
            print "Got a Match"
        else:
            print "No Match Found"

我只得到了“未找到匹配项”的结果。 我做错了什么吗? 在pandas系列中的数据是“float64”,而字典中的键是“int”,但我将pandas系列转换为int后,仍然无法匹配这些项。 如有帮助,请指教。

谢谢!


请使用itertuples替换相同的代码进行尝试。 - Ted Petrou
它对我来说运行良好,你使用的是哪个Python版本? - Carles Mitjans
另外,你的问题的最终目的是什么?看起来你不需要循环。你能提供更多信息吗?如果需要在内部循环中进行调试,请使用print函数获取更多信息:print(row['x'], x) - Ted Petrou
Python 3.5,Pandas 0.18...真实的数据框和字典都更大。最终目的是使用字典中每个键关联的值来调整pandas数据帧中的不同列。我正在进行print(row['x'],x)操作,数字都显示为匹配,但for循环仍然无法正常工作。 - Jeff Saltfist
2个回答

8
如果您想基于字典创建新列,可以使用 pandas.Series.map
>>> df['n'] = df['x'].map(d)
>>> df
    x   y     n
1   1  10  val1
2  10  56   NaN

1
考虑以下这个 df
   x   y
0       
1  1  10
2  2  56
3  3  11

和字典

d = {1: 'a', 2: 'a'}

当您使用pd.Series.map时,它会填充可能存在的位置,并在没有键存在的情况下返回NaN。这对于识别x匹配的位置以及稍后替换值非常有用。
df.x.map(d)

0
1      a
2      a
3    NaN
Name: x, dtype: object

d_ = {k: 'Match!' for k, _ in d.items()}
df.x.map(d_).fillna('No Match :-(')

0
1          Match!
2          Match!
3    No Match :-(
Name: x, dtype: object

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接