我有兩個數據框df1nameADAM, HAFIZ MABAD, FARLEY JCORDDED, NANCY CBOMBSHAD, WANG Ddf2JOSEPH W. HOLUBKA WANG E. JONATHANCUCU F. LIU,WANG C. DANA,LANDY F. JON我希望提取每個數據幀的名字。對于 df1,我需要“,”之后的“名字”部分,第二個 df,名字就是我想要的。所以返回的 df 是df1HAFIZFARLEYNANCYWANGdf2JOSEPHWANGCUCUWANGLANDY我當前的代碼是 df['name'].str.upper().apply(lambda name:re.search(r'\w+(?!.*,)',name).group())這個正則表達式適用于兩個 df,但是,我剛剛意識到我的數據有一個輸入錯誤。在 df2 中,Liu 和 Dana 末尾有一個“,”,這導致正則表達式不起作用。錯誤是 group() 不是屬性。無論如何我可以修復這個代碼嗎?正則表達式應該適用于 df
2 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
您可以使用
(^(?=[^,]*,?$)[\w'-]+|(?<=, )[\w'-]+)
請參閱正則表達式演示。如果字符串中存在尾隨逗號,則此模式允許在字符串中的初始位置匹配名稱。
在 Pandas 中使用向Series.str.extract
量化方法:
df['first name'] = df['name'].str.upper().str.extract(r"(^(?=[^,]*,?$)[\w'-]+|(?<=, )[\w'-]+)", expand=False)
正則表達式詳細信息
^(?=[^,]*,?$)[\w'-]+
'
- 一個或多個單詞,如果字符串沒有逗號但可以以可選逗號 ( ) 結尾,則在字符串 ( ) 開頭添加-
字符[\w'-]+
( )^
(?=[^,]*,?$)
|
- 或者(?<=, )[\w'-]+
- 一個或多個單詞,'
以及-
字符 字符前面帶有逗號 + 空格。

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
再試一次,因為我的第一個不在那里。您只需要更改一件事。當它們的前瞻匹配任何逗號時,我們只想匹配后面跟著另一個單詞的逗號。導致:
(?:(?<=^(?!.*,?*\w))|(?<=,?))([A-Z]+)
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消