我有一个像这样的pandas专栏:
LOD-NY-EP-ADM
LOD-NY-EC-RUL
LOD-NY-EC-WFL
LOD-NY-LSM-SER
LOD-NY-PM-MOB
LOD-NY-PM-MOB
LOD-NY-RMK
LOD-NY-EC-TIM
我希望新列中的输出为
EP
EC
EC
LSM
PM
PM
RMK
EC
我试过了:
pattern=df.column[0:10].str.extract(r"\w*-NY-(.*?)-\w*",expand=False)
虽然它适用于所有东西,但它无法将RMK输出并给出NaN,因为之后没有任何内容,它会查找 - \ w零次或多次。但是,如果在RMK之后什么也没有,那应该有用。
任何想法都会出错?
如果不熟悉pandas语法,我们可以使用这些数组并使用正则表达式。
答案 0 :(得分:1)
你能用普通的python吗? 设df为您的数据框,row为您行的名称。
series = df.row
new_list = [i.split('-')[2] for i in series]
new_series = pd.Series(new_list)
答案 1 :(得分:1)
pattern=df.column[0:10].str.extract(r"\w*-NY-(\w+)",expand=False)
请参阅https://regex101.com/r/3uDpam/3
您的正则表达式意味着匹配的字符串必须包含3个-
个字符。我改变了它,所以最后-XX
可能会发生0或1次。
更新:已更改,因此第二组未捕获(已添加?:
)
更新:感谢Casimir,在模式结束时删除了无用的组