從這兩個字符串,我想捕捉的部分在第一行說:5X
,但不是在第二行中的部分X50
:熊貓str.extract:空白外面正則表達式捕獲組拋出AttributeError的
"name"
1 LONG YOX 5X AAA
2 LONG YOX50 AAA
對於pandas.DataFrame.loc
操作,我使用numpy.where
使用long_keyword
上述部件提取與str.extract
定位器的正則表達式:
long_keyword = df.loc[df["name"].str.contains("LONG", case=False), "name"]
df.loc[df["name"].str.contains(long_keyword, case=False), "result_column"] = np.where(long_keyword.str.extract(r"\s(\d+X|X\d+)", flags=re.IGNORECASE).str.strip("Xx").str.isdigit(), "+" + long_keyword.str.extract(r"\s(\d+X|X\d+)", flags=re.IGNORECASE).str.strip("Xx") + "00", "+100")
當我使用正則表達式\s(\d+X|X\d+)
,我得到:
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
但是,當我使用相同的正則表達式沒有捕獲組的前導空格\s
之外 - 即(\d+X|X\d+)
- 我沒有得到任何錯誤。然而這意味着我不想要的那部分字符串將被包含在捕獲中。
問:我該如何解決這個錯誤?問題是空白\s
還是我在捕獲組()
之外有正則表達式標識符?
請發佈[mcve]我們可以運行以複製問題。避免包含與問題無關的問題。 'df.loc'和'np.where'位看起來不像你的問題。你的snbtax和'np.where'的使用不正確。 'sourceString.str.extract'適用於我。 – Goyo
@Goyo我修改了這個問題,並添加了更準確的細節。不知道是否改變了一切。 – Winterflags
你的代碼引發了TypeError:'Series'對象是可變的,因此無論正則表達式如何,它們都不能被散列。無論如何,你不希望我能幫你調試一行280個字符長的代碼,有16個操作/屬性訪問/方法調用,是嗎?爲什麼你會一直髮布不可能產生你所描述的問題的代碼? – Goyo