2017-03-19 192 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")