2017-06-29 68 views
0

我想標記一行,如果它們存在於數據框中。這裏是我的代碼片段:列表理解熊貓

MissingAATracking = [] 
    for row in UK.UK: 
     if row in links_adobe_uk: 
      MissingAATracking.append("NO") 
     else: 
      MissingAATracking.append("YES") 

我收到以下錯誤:

> --------------------------------------------------------------------------- TypeError         Traceback (most recent call 
> last) <ipython-input-94-5b85f0a628ec> in <module>() 
>  1 for row in UK.UK: 
> ----> 2  if row in links_adobe_uk: 
>  3   MissingAATracking.append("NO") 
>  4  else: 
>  5   MissingAATracking.append("YES") 
> 
> /anaconda/lib/python3.6/site-packages/pandas/core/generic.py in 
> __contains__(self, key) 
>  905  def __contains__(self, key): 
>  906   """True if the key is in the info axis""" 
> --> 907   return key in self._info_axis 
>  908 
>  909  @property 
> 
> /anaconda/lib/python3.6/site-packages/pandas/core/indexes/base.py in 
> __contains__(self, key) 1588  @Appender(_index_shared_docs['__contains__'] % _index_doc_kwargs) 
> 1589  def __contains__(self, key): 
> -> 1590   hash(key) 1591   try: 1592    return key in self._engine 
> 
> TypeError: unhashable type: 'list' 

我已經在這裏看了:Python, TypeError: unhashable type: 'list'

UPDATE

這裏是頭我的英國數據框的外觀如下:

  UK 
0  Link1 
1  Link1 
2  Link1 
3  Link1 
4  Link1 

和我links_adobe_uk:

 PageURL 
0  (null) 
1  Link1 
2  Link1 
3  Link1 
4  Link1 

我也試圖從兩列下降重複,但我的英國數據幀拋出一個

TypeError: unhashable type: 'list'

,但我不能似乎遵循英國和links_adobe_uk被兩個數據幀。我會感謝這個

+1

你正在努力探索從'UK'數據幀一排'links_adobe_uk'的問題,這是不可能的。你應該做的是每行提供一些唯一的鍵,或者使用索引來檢查行是否存在於另一個數據框中。 –

+1

如果你顯示你的英國和links_adobe_uk數據框的幾行,你將會得到一個更有效的方式來做你想做的事。 – Allen

+0

如果可能的話,還共享您的兩個數據幀的示例行。我們將能夠提供更好的幫助。 –

回答

1
import pandas as pd 

df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5]}) 
df2 = pd.DataFrame(data = {'col1' : [1, 2, 3]}) 

# merge both dataframes on the common column 
common = df1.merge(df2,on=['col1']) 

# wherever the common column is present in df1 return "YES" else "NO" 
missing_tracking = ["Yes" if val else "No" for val in (df1.col1.isin(common.col1)).values ] 

輸出:

['Yes', 'Yes', 'Yes', 'No', 'No'] 

現金:pandas get rows which are NOT in other dataframe

1

作爲數據幀 'links_adobe_uk' 只包含一列,它被當作一個系列。這就是它顯示錯誤的原因,「不可用類型:列表」。因此,該系列轉換成列表將解決

list_to_search = links_adobe_UK.PageURL.values.tolist() 
MissingAATracking = [] 
for row in UK.UK: 
    if row in list_to_search: 
     MissingAATracking.append('No') 
    else: 
     MissingAATracking.append('Yes') 
print(MissingAATracking)