if "\"" or "[" in x:
應該
if "\"" in x or "[" in x: # x must contain a left bracket or double-quote.
或
if x.startswith(('"', '[')): # x must start with a left-braket or double-quote
因爲Python解析前者爲
if ("\"") or ("[" in x):
由於in
運營商綁定比or
更緊密。 (見Python operator precedence)
由於任何非空的字符串,如"\""
已經布爾真值True
,該if-statement
的條件總是真,這就是爲什麼 keyword_cleanup
總返回x[1:-1]
。
但是,還要注意熊貓有string operators builtin。使用它們將比使用apply
爲Series中的每個項目調用自定義Python函數要快得多。
In [136]: s = pd.Series(['"cxxx"', '[asdfasd]', 'asdfasdf', '[asdf]', '"asdf"'])
In [137]: s.str.replace(r'^["[](.*)[]"]$', r'\1')
Out[137]:
0 cxxx
1 asdfasd
2 asdfasdf
3 asdf
4 asdf
dtype: object
如果你想要去除從每個串的兩端都括號或雙引號,你也可以使用
In [144]: s.str.strip('["]')
Out[144]:
0 cxxx
1 asdfasd
2 asdfasdf
3 asdf
4 asdf
dtype: object
第一個選項爲我的偉大工程。問題:爲什麼我的初始代碼刪除了不包含括號或引號的字符串中的第一個和最後一個字符,如python解析的那樣:if(「\」「)或(」[「in x):' – metersk
您可以也傳遞元組到'str.startswith()':'x.startswith((''','['))' – msvalkon
@msvalkon:非常感謝你的改進。 – unutbu