我有一个数据框:
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']
我应该以某种方式将正则表达式与df.apply中的变量混合使用,就像这样吗?
df.id = df.apply(lambda x: x['id'].replace(r'\b' + x['series'], ''), axis =1)
答案 0 :(得分:9)
使用str.split
和str.get
并仅在loc
df.make == ''
进行分配
df.loc[df.make == '', 'make'] = df.id.str.split().str.get(0)
print df
id make
0 abarth 1.4 abarth
1 abarth 1 abarth
2 land rover 1.3 rover
3 land rover 2 rover
4 land rover 5 rover
5 mazda 4.55 mazda
答案 1 :(得分:2)
很简单。用法如下:
df['make'] = df['id'].str.split(' ').str[0]
答案 2 :(得分:1)
考虑使用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'])
答案 3 :(得分:1)
IDK为什么但下面有部分
df.loc[df.make == '', 'make']
OR
df.loc[df['make'] == '', 'make']
我收到错误- KeyError:“制作”
所以我做了(如果有人看到相同的错误):
df['make'] = df['id']
df['make'] = df.id.str.split().str.get(0)
为我工作。
答案 4 :(得分:0)
如果我的问题正确,您只需使用replace
功能:
df.make = df.make.replace("", test.id)