Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过识别模式来替换具有不同名称的列的条目?_Python_String_Pandas - Fatal编程技术网

Python 如何通过识别模式来替换具有不同名称的列的条目?

Python 如何通过识别模式来替换具有不同名称的列的条目?,python,string,pandas,Python,String,Pandas,我有一个专栏,比如说,'Match Place',里面有诸如'MANU@POR','MANU vs.UTA','MANU@IND','MANU vs.GRE'等条目。所以我的专栏有三个条目,第一个名字是MANU,即第一个国家代码,第二个是@/vs.,第三个是第二个国家名称。所以我想做的是,如果“@”出现在我专栏的任何条目中,我想把它改成“远离”,如果“vs.出现,把整个条目改成“home”,比如“MANU@POR”应该改成“远离”,“MANU vs.GRE”应该改成“home” 虽然我用for、

我有一个专栏,比如说,
'Match Place'
,里面有诸如
'MANU@POR'
'MANU vs.UTA'
'MANU@IND'
'MANU vs.GRE'
等条目。所以我的专栏有三个条目,第一个名字是
MANU
,即第一个国家代码,第二个是
@/vs.
,第三个是第二个国家名称。所以我想做的是,如果
“@”
出现在我专栏的任何条目中,我想把它改成
“远离”
,如果
“vs.
出现,把整个条目改成
“home”
,比如“MANU@POR”应该改成
“远离”
,“MANU vs.GRE”应该改成
“home”

虽然我用for、if、else编写了一些代码来实现这一点,但是计算它花费的时间太长了,我的总行数是30697 那么有没有其他方法来缩短时间呢 下面我给你看我的代码 请帮忙

您可以使用检查字符串是否包含
@
,然后使用相应地填充值。例如:

>>> df
          match
0    MANU @ POR
1  MANU vs. UTA
2    MANU @ IND
3  MANU vs. GRE
>>> df['match'].str.contains('@').map({False: 'home', True: 'away'})
0    away
1    home
2    away
3    home
Name: match, dtype: object

使用np.where to with contains检查是否存在任何子字符串

import numpy as np
df = pd.DataFrame(data={"col1":["manu vs. abc","manu @ pro"]})
df['type'] = np.where(df['col1'].str.contains("@"),"away","home")
您可以使用来指定多个条件:

s=df['Match Place'].str.split().str[1] #select the middle element
c1,c2=s.eq('@'),s.eq('vs.') #assign conditions
np.select([c1,c2],['away','home']) #assign this to the desired column
#array(['away', 'home', 'away', 'home'], dtype='<U11')
s=df['Match Place'].str.split().str[1]#选择中间的元素
c1,c2=s.eq('@'),s.eq('vs.)#分配条件
np.选择([c1,c2],“离开”,“回家])#将其分配给所需的列

#数组(['away'、'home'、'away'、'home'],dtype='替换的有趣用法
更多信息检查


由于您的第一个单词始终是MANU,所以字符串的第六个元素包含“@”或“v”。您可以使用check df['home/away'][i][5]来加快进程,而不是使用split。
        col1       type
0   manu vs. abc    home
1   manu @ pro      away
s=df['Match Place'].str.split().str[1] #select the middle element
c1,c2=s.eq('@'),s.eq('vs.') #assign conditions
np.select([c1,c2],['away','home']) #assign this to the desired column
#array(['away', 'home', 'away', 'home'], dtype='<U11')
df['match'].replace({'@':0},regex=True).astype(bool).map({False: 'away', True: 'home'})
0    away
1    home
2    away
3    home
Name: match, dtype: object