Python 如何测试列表中包含元素的字符串,并通过测试将目标元素分配给另一列
我有一个单列列表,列出了一些公司名称。其中一些名称包含国家名称(例如,“中国A1”中的“中国”,芬兰C1中的“芬兰”)。我想根据公司名称和由国家名称组成的预定义列表提取他们所属的国家 原始数据帧df如下所示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
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