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

2024-05-16 12:36:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似的问题: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' object has no attribute 'lstrip'

我是不是丢了什么东西?


Tags: lambdainfrommapdataframepandascolumnppi
2条回答

使用replace

temp_dataframe['PPI'].replace('PPI/','',regex=True,inplace=True)

string.replace

temp_dataframe['PPI'].str.replace('PPI/','')

使用矢量化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)

相关问题 更多 >