Python 如何测试列表中包含元素的字符串,并通过测试将目标元素分配给另一列

Python 如何测试列表中包含元素的字符串,并通过测试将目标元素分配给另一列,python,string,pandas,python-2.7,dataframe,Python,String,Pandas,Python 2.7,Dataframe,我有一个单列列表,列出了一些公司名称。其中一些名称包含国家名称(例如,“中国A1”中的“中国”,芬兰C1中的“芬兰”)。我想根据公司名称和由国家名称组成的预定义列表提取他们所属的国家 原始数据帧df如下所示 Company name Country 0 China A1 1 Australia-A2 2 Belgium_C1 3 C1 in Finland 4 D1 of Greece 5 E2 for

我有一个单列列表,列出了一些公司名称。其中一些名称包含国家名称(例如,“中国A1”中的“中国”,芬兰C1中的“芬兰”)。我想根据公司名称和由国家名称组成的预定义列表提取他们所属的国家

原始数据帧df如下所示

    Company name    Country
0   China A1        
1   Australia-A2        
2   Belgium_C1      
3   C1  in  Finland
4   D1  of  Greece
5   E2  for Pakistan
现在,我只能想出一个低效的方法。这是我的密码:

country_list = ['China','America','Greece','Pakistan','Finland','Belgium','Japan','British','Australia']
for t in country_list:
    df.loc[df['company name'].contains(t),'country']=t
结果表明

    Company name    Country
0   China A1        China
1   Australia-A2    Australia   
2   Belgium_C1      Belgium
3   C1  in  Finland Finland
4   D1  of  Greece  Greece
5   E2  for Pakistan Pakistan
我认为,当country_列表包含大量元素时,即country,通过循环方法将非常耗时。有没有更简单的方法来解决我的问题?

这里有一种方法:


使用
str.extract
Regex

Ex:

import pandas as pd
country_list = ['China','America','Greece','Pakistan','Finland','Belgium','Japan','British','Australia']

df = pd.read_csv(filename)
df["Country"] = df["Company_name"].str.extract("("+"|".join(country_list)+ ")")
print(df)
           Company_name    Country
0      China A1              China
1  Australia-A2          Australia
2      Belgium_C1          Belgium
3       C1  in  Finland    Finland
4        D1  of  Greece     Greece
5      E2  for Pakistan   Pakistan
输出:

import pandas as pd
country_list = ['China','America','Greece','Pakistan','Finland','Belgium','Japan','British','Australia']

df = pd.read_csv(filename)
df["Country"] = df["Company_name"].str.extract("("+"|".join(country_list)+ ")")
print(df)
           Company_name    Country
0      China A1              China
1  Australia-A2          Australia
2      Belgium_C1          Belgium
3       C1  in  Finland    Finland
4        D1  of  Greece     Greece
5      E2  for Pakistan   Pakistan
您需要:


如果一个单元格中有多个国家/地区名称,可以使用
findall

df["Company name"].str.findall('|'.join(country_list)).str[0]
Out[758]: 
0        China
1    Australia
2      Belgium
3      Finland
4       Greece
5     Pakistan
Name: Company name, dtype: object