Python 返回列的字符串中的第一个字
我有一个数据帧:Python 返回列的字符串中的第一个字,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧: df = pd.DataFrame({'id' : ['abarth 1.4 a','abarth 1 a','land rover 1.3 r','land rover 2', 'land rover 5 g','mazda 4.55 bl'], 'series': ['a','a','r','','g', 'bl'] }) 我想从相应的id中删除“series”字符串,因此最终结
df = pd.DataFrame({'id' : ['abarth 1.4 a','abarth 1 a','land rover 1.3 r','land rover 2',
'land rover 5 g','mazda 4.55 bl'],
'series': ['a','a','r','','g', 'bl'] })
我想从相应的id中删除“series”字符串,因此最终结果应该是:
最终结果应该是'id':['abarth 1.4'、'abarth 1'、'land rover 1.3'、'land rover 2'、'land rover 5'、'mazda 4.55']
目前我正在使用df.apply:
df.id = df.apply(lambda x: x['id'].replace(x['series'], ''), axis =1)
但这会删除字符串的所有实例,即使换言之,如下所示:
'id':['brth 1.4'、'brth 1'、'land ove 1.3'、'land rover 2'、'land rover 5'、'mazda 4.55']
我是否应该以某种方式将regex与df.apply中的变量混合匹配,就像这样
df.id = df.apply(lambda x: x['id'].replace(r'\b' + x['series'], ''), axis =1)
如果我没有弄错您的问题,您可以使用
replace
功能:
df.make = df.make.replace("", test.id)
考虑一个带有
loc
的正则表达式解决方案,它在第一个空格之前提取所有内容:
df.loc[df['make']=='', 'make'] = df['id'].str.extract('(.*) ', expand=False)
或者,使用numpy的where
,它允许if/then/else条件逻辑:
df['make'] = np.where(df['make']=='',
df['id'].str.extract('(.*) ', expand=False),
df['make'])
使用
str.split
和str.get
并仅在df.make=''
很简单。使用方法如下:
df['make'] = df['id'].str.split(' ').str[0]
IDK为什么要用下面的部分呢
df.loc[df.make == '', 'make']
或
我得到错误-keyrerror:“make”
所以我做了(万一有人看到同样的错误):
为我工作。OP需要
id
列的第一个单词。
df.loc[df.make == '', 'make']
df.loc[df['make'] == '', 'make']
df['make'] = df['id']
df['make'] = df.id.str.split().str.get(0)