我对此问题提出了类似的问题:Pandas DataFrame: remove unwanted parts from strings in a column。
所以我用过:
temp_dataframe['PPI'] = temp_dataframe['PPI'].map(lambda x: x.lstrip('PPI/'))
大多数项目都以' PPI /'但不是所有的。似乎没有' PPI /'后缀遇到此错误:
AttributeError:' float'对象没有属性' lstrip'
我在这里错过了什么吗?
答案 0 :(得分:4)
使用replace:
library(data.table)
setDT(df1)[df1[order(USERNAME, TIME), .I[seq(which.max(grepl("Order",
API_TRACK_EVENT)))], USERNAME]$V1]
temp_dataframe['PPI'].replace('PPI/','',regex=True,inplace=True)
答案 1 :(得分:2)
使用vectorised str.lstrip
:
temp_dataframe['PPI'] = temp_dataframe['PPI'].str.lstrip('PPI/')
看起来您可能缺少值,因此您应该将其掩盖或替换它们:
temp_dataframe['PPI'].fillna('', inplace=True)
或
temp_dataframe.loc[temp_dataframe['PPI'].notnull(), 'PPI'] = temp_dataframe['PPI'].str.lstrip('PPI/')
也许更好的方法是使用str.startswith
进行过滤并使用split
并在要删除的前缀后访问字符串:
temp_dataframe.loc[temp_dataframe['PPI'].str.startswith('PPI/'), 'PPI'] = temp_dataframe['PPI'].str.split('PPI/').str[1]
正如@JonClements所指出的,lstrip
正在删除空格,而不是删除你所追求的前缀。
<强>更新强>
另一种方法是传递正则表达式模式,该模式查找可选前缀并提取前缀后的所有字符:
temp_dataframe['PPI'].str.extract('(?:PPI/)?(.*)', expand=False)