如何用Pandas,Python中的一些特定单词替换系列中的所有单词?

时间:2014-02-20 21:21:35

标签: python string replace pandas

我想基本上使用python查找和替换。

但是,我想说一个单元格是否包含某些内容,然后替换为我想要的内容。

我知道

str.replace('safsd','something else')

但是,我不知道如何指定如何摆脱该单元格中的所有内容。我使用*吗?我对python中的不太熟悉,但我知道在bash shell中*引用了所有内容......

我有

df['Description'] 

可以包含我只想用'optiplex 9010 for classes and research'替换的'optiplex 9010'。或'macbook air 11 with configurations...etc.',我只想'macbook air 11'

我的目标是......

if  Df['Description'].str.contains('macbook air 11')
  then Df['Description'].str.replace(' (not sure what I put in here) , 'mabook air 11')

任何帮助/想法?

谢谢!

**可能是helfpul的其他信息...

我正在处理数以千计的不同用户输入。因此,某人所购买的“描述”在背景,措辞,结构等方面根本不会相同。 我可以手动进入excel并按照包含'optiplex 9010'的内容进行过滤,然后用简单的描述替换所有内容,对macbook执行相同操作等。

我认为使用pandas / python .str.contains和.str.replace可能有一些更简单的方法。

希望额外的信息有用!让我知道

3 个答案:

答案 0 :(得分:4)

str.replace采用正则表达式,例如'macbook air 11'跟随零(或更多)(*)任何字符(.)(您也可以标记为大小写)不敏感的):

Df['Description'].str.replace('macbook air 11.*' , 'macbook air 11')

可以找到关于正则表达式的一点启蒙here

但是,你可能会更好,特别是如果你已经有一个完整的主题列表,以规范化名称(例如在question / answer中使用fuzzywuzzy):

from fuzzywuzzy.fuzz import partial_ratio
Df['Description'].apply(lambda x: max(topics, key=lambda t: partial_ratio(x, t)))

答案 1 :(得分:0)

你可以在像这样的Pandas系列上使用正则表达式。

首先创建一个愚蠢的字符串系列:

>>> import re
>>> import pandas as pd
>>> s=pd.Series(['Value {} of 3'.format(e) for e in range(1,4)])
>>> s
0     Value 1 of 3
1     Value 2 of 3
2     Value 3 of 3

然后使用regex sub将所有数字的字符串值替换为5,将小写字母替换为字符串:

>>> s.apply(lambda s: re.sub(r'\d+', '5', s).lower())
0    value 5 of 5
1    value 5 of 5
2    value 5 of 5
dtype: object

当然,如果您只想替换all,可以使用正则表达式或字符串替换:

>>> s.apply(lambda s: re.sub(r'^.*$', 'GONE!!!', s))
0    GONE!!!
1    GONE!!!
2    GONE!!!
dtype: object
>>> s.apply(lambda s: s.replace(s, 'GONE!!!'))
0    GONE!!!
1    GONE!!!
2    GONE!!!
dtype: object

答案 2 :(得分:0)

这是一个可以使用正则表达式解决的问题的完美示例。我也发现这样的情况是了解它们的一个很好的借口!这是一个关于如何使用正则表达式http://www.regular-expressions.info/tutorial.html

的非常详细的教程