2017-03-19 191 views
-1

的內容在Python中添加一個新列我有一個國家名稱的數據框,我想添加一個表明它是否是穆斯林禁令的一部分的列。因此,理想情況下,我想這一點:基於另一個

Country Name   Ban 
Indonesia    non_muslim_ban 
Iran, Islamic Rep. muslim_ban 
Iraq     non_muslim_ban 
Ireland    non_muslim_ban 
Libya     muslim_ban 
Liechtenstein   non_muslim_ban 
Somalia    muslim_ban 
South Africa   non_muslim_ban 
Sudan     muslim_ban 
Syrian Arab Republic muslim_ban 
West Bank and Gaza non_muslim_ban 
Yemen, Rep.   muslim_ban 
Zambia    non_muslim_ban 
Zimbabwe    non_muslim_ban 

我想這個功能得到了一個錯誤:

def muslim_ban(Country_Name): 
    if df['Country Name'] in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']: 
     return 'muslim_ban' 
    elif df['Country Name'] not in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']: 
     return 'non_muslim_ban' 
`df['muslim_ban'] = df['Country Name'].apply(muslim_ban) 


ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

有人能幫助嗎?

更新,包括修改後的代碼

回答

1

您的代碼很少出現問題。

首先,您在muslim_ban的函數定義中有空格分隔的變量名稱。因此,更換「國家名稱」的東西,如「COUNTRY_NAME」

其次,你可以把miltiple字符串,如果條件列表內,然後用innot in操作來檢查是否存在。

def muslim_ban(Country_Name): 
    if Country_Name in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']: 
     return 'muslim_ban' 
    elif Country_Name not in ['Iran', 'Libya', 'Somalia', 'Sudan', 'Syria', 'Yemen']: 
     return 'non_muslim_ban' 

df['muslim_ban'] = df['Country_Name'].apply(muslim_ban) 
+0

謝謝!這工作...但是當我這樣做:df_details_by_country ['mulsim_ban'] = df_details_by_country.Country Name.apply(muslim_ban),我收到另一個語法錯誤右邊應用附近。你可知道發生了什麼? –

+0

我認爲問題的代碼的第二行是'='而不是'=='。這裏的代碼解決了這個問題。我仍然認爲'elif'並不是真的有必要。 – Michael

+0

我在最後一行看到一個** **字符和**國家名**。 –

0

你確定你能有分裂這樣的功能參數: Country Name?也許這是你的語法錯誤。順便說一下,語法錯誤應該顯示你遇到錯誤的地方。

+0

行一個: 文件 「」,第1行 DEF muslim_ban(國家名稱): ^ 語法錯誤:無效的語法 右在E):的(國家名稱): –

1

這裏有些事情可能會有所幫助。

  1. 更改國名,以COUNTRYNAME
  2. 使用「==」的比較,而不是賦值運算符「=」。
  3. 你不需要一個elif,因爲你可以使用else返回'non ban'
  4. 在你的代碼的最後一行有一個單引號在你的行首。

希望這會有所幫助!

0

ban_muslim = ["Yemen" ,"Syrian Arab Republic" , "Sudan" , "Somalia", "Libya" , "Iran" ] ban_non_muslim = ["Indonesia","Iraq","Ireland","Liechtenstein","South Africa","Gaza" ,"Zambia","Zimbabwe"] country_name = str(input("please enter your country name: "))

if country_name in ban_muslim : print ("you entered banned muslim country ",country_name) elif country_name in ban_non_muslim: print("you entered banned muslim country " ,country_name) else: print (" you enterd unavailable name")