Python大熊猫不会识别特殊字符

时间:2017-09-01 14:45:33

标签: python pandas special-characters contains

我正在尝试在python pandas中使用df['column_name'].str.count("+"),但我收到了

  

"错误:无需重复"

。对于常规字符,该方法有效,例如, df['column_name'].str.count("a")工作正常。

此外," ^" -sign存在问题。如果我使用df['column_name'].str.contains("^"),则结果不正确 - 它看起来像" ^"被解释为" " (空白空间)。

令人惊讶的是,如果我在常规的非熊猫字符串上使用.count("+").contains("^"),那么它们的效果非常好。

简单的工作示例:

df = pd.DataFrame({'column1': ['Nighthawks+', 'Dragoons'], 'column2': ['1st', '2nd']}, columns = ['column1', 'column2'])

申请df["column1"].str.contains("^")时,获得" True,True"但是应该是" False,False"。

当应用df["column1"].str.count("+")时,一个人获得

  

"错误:无需重复"

但是,在熊猫之​​外,"bla++".count("+")正确地给出了结果" 2"。

任何解决方案?感谢

2 个答案:

答案 0 :(得分:3)

你需要逃避加号:

In[10]:
df = pd.DataFrame({'a':['dsa^', '^++', '+++','asdasads']})
df

Out[10]: 
          a
0      dsa^
1       ^++
2       +++
3  asdasads

In[11]:
df['a'].str.count("\+")

Out[11]: 
0    0
1    2
2    3
3    0
Name: a, dtype: int64

此外,当您执行df['a'].str.count('^')时,这只会为所有行返回1

In[12]:
df['a'].str.count('^')

Out[12]: 
0    1
1    1
2    1
3    1
Name: a, dtype: int64

你需要再次逃避模式:

In[16]:
df['a'].str.count('\^')

Out[16]: 
0    1
1    1
2    0
3    0
Name: a, dtype: int64

修改

关于普通字符串countSeries上的str之间的语义差异,^上的count只是字符数,但是{{3}采用正则表达式模式。 +@setLocal cd /d "Z:\PUBLIC\Auftrag_MegaCAD\" start Auftrag.exe %1 是特殊字符,如果您要搜索这些字符,则需要使用反斜杠进行转义

答案 1 :(得分:3)

str.count()

表示特殊字符,您需要对正则表达式使用反斜杠。 (上面的@EdChum对此进行了详细说明)。

另一方面,在str.contains()中,我们不需要对正则表达式使用反斜杠。只需添加regex=False之类的df['a'].str.contains("+", regex=False))参数即可搜索并找到包含特殊字符的字符串。