从pandas中的字符串中删除字符

时间:2016-06-20 09:55:24

标签: python pandas

我对此问题提出了类似的问题: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'

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:4)

使用replace

library(data.table)
setDT(df1)[df1[order(USERNAME, TIME), .I[seq(which.max(grepl("Order", 
                       API_TRACK_EVENT)))], USERNAME]$V1]

string.replace

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)