2016-12-23 105 views
0

我有一本字典大熊猫 - 在字典中的列值与值进行比较

d = {1:a,2:a} 

我也有出于某种原因大熊猫框架“DF”

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" 

我得到的只是“找不到匹配”。有什么我做错了吗?熊猫系列中的数据是“float64”,字典中的键是“int”,但我将熊猫系列转换为int,并且仍然无法匹配这些项目。任何帮助赞赏。

感谢

+0

尝试itertuples用,而不是相同的代码 –

+0

它正常工作对我来说,你使用什么python版本? –

+0

另外,你的问题的最终目的是什么。看起来你并不需要一个循环。你能给更多的信息。并且为了在你的内部循环中进行调试,使用print函数获取更多信息:'print(row ['x'],x)' –

回答

2

如果你想基于字典创建新列,您可以使用pandas.Series.map

>>> df['n'] = df['x'].map(d) 
>>> df 
    x y  n 
1 1 10 val1 
2 10 56 NaN 
+0

这解决了我的问题。感谢罗马。 –

0

考虑这个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