代碼 -
df['Expiry'], df['Symbol'] = None, None
index_Ticker = df.columns.get_loc('Ticker')
index_Expiry = df.columns.get_loc('Expiry')
index_Symbol = df.columns.get_loc('Symbol')
Expiry_Pattern = r'-([A-Z]{1,3})'
Symbol_Pattern = r'(.*?)-[A-Z]{1,3}'
for row in range(0, len(df)):
Expiry = re.search(Expiry_Pattern, df.iat[row, index_Ticker]).group()
df.iat[row, index_Expiry] = Expiry
Symbol = re.search(Symbol_Pattern, df.iat[row, index_Ticker]).group()
df.iat[row, index_Symbol] = Symbol
在這里我使用這個正則運算式
Expiry_Pattern = r'-([A-Z]{1,3})'
Symbol_Pattern = r'(.*?)-[A-Z]{1,3}'
我的輸出是 - 輸出影像
我的實際資料采用這種格式 -
ZEEL-III.NFO
RELIANCE-III.NFO
ADANIPORTS-I.NFO
ZEEL-II.
AARTIIND-III.NFO
但我想要輸出 -
ZEEL III
RELIANCE III
ADANIPORTS I
ZEEL II
AARTIIND III
我不明白我該如何解決這個問題。
uj5u.com熱心網友回復:
您可以使用正則運算式'-?(\w )(?=-|\.)'來獲取您擁有的示例資料的預期輸出:
>>> df['col'].str.findall('-?(\w )(?=-|\.)').apply(pd.Series)
0 1
0 ZEEL III
1 RELIANCE III
2 ADANIPORTS I
3 ZEEL II
4 AARTIIND III`
圖案說明:
'-?(\w )(?=-|\.)'
-?將-在開頭匹配一次或零次出現的連字符(\w )捕獲單詞/子字串(?=-|\.)是積極的前瞻,以確保它以-或結束.
在非正則運算式的解決方案:
首先將字串拆分為 1,將.maxsplitn設為 1,然后取第一個索引處的值,并將其拆分為-:
df['col'].str.rsplit('.', n=1).str[:-1].str[0].str.split('-').apply(pd.Series)
0 1
0 ZEEL III
1 RELIANCE III
2 ADANIPORTS I
3 ZEEL II
4 AARTIIND III
uj5u.com熱心網友回復:
我提取價值 -
df["Symbol"] = df["Ticker"].str.extract('(.*?)-').apply(pd.Series)
df["Expiry"] = df["Ticker"].str.extract('-([A-Z]{1,3})').apply(pd.Series)
并創建兩列。
現在我的輸出也和我想要的一樣。 輸出影像
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336624.html
下一篇:根據部分字串或子字串更改列名
