我有一個文本列,它基本上有一種注釋,并且大多數注釋在文本的最后一個空格之后以 2 到 3 個大寫字母結尾,如下面的 2 個示例所示。而且我需要將最后一個空格之后的最后一個字符提取到熊貓或sql中的新列中。只有當它們是大寫字母時才應該提取它們,否則為空。
前 1 - 5723452309423 | 不適用 | 客戶取消購買| 退款 | 2021 年 3 月 12 日 | 審批人為 BG
前 2 - 54986866 | 不適用 | 客戶訂單退回| 已退款 | 12.4.2021 | AKS
在此處輸入影像描述
uj5u.com熱心網友回復:
如果這些只是字串,那么您可以使用 string.split(" ")[-1] 來檢索最后一部分。
my_str = "5723452309423 | NA | customer cancelled purchase| refund given | 12.3.2021 | approver is BG"
my_str.split(" ")[-1]
輸出為“BG”,那么您可以使用 string.isupper() 來檢查大小寫。
my_str.split(" ")[-1].isupper()
輸出為真
uj5u.com熱心網友回復:
df = pd.DataFrame({
"col1": ["approver is BG", " AKS"]
})
df["col2"] = df["col1"].str.split(" ").str[-1]
df 是:
col1 col2
approver is BG BG
AKS AKS
uj5u.com熱心網友回復:
您可以使用正則運算式最后顯式選擇 2/3 大寫字符:
df['new'] = df['note'].str.extract(r'([A-Z]{2,3}$)')
或更一般地,對于最后一個塊rsplit:
df['new'] = df['note'].str.rsplit('\s ', n=1).str[-1]
uj5u.com熱心網友回復:
如果您想在 SQL 中執行此操作,您可以忽略有多少字串,方法是在將字串拆分之前反轉字串OPENJSON(),然后在提取最后一個元素后再次反轉它。在 SQL Server 中檢查大寫也有點麻煩。對于像這樣的大塊狀和不規則的字串,你幾乎可以肯定在 Python 中這樣做會更好。
盡管如此,鑒于這些資料:
CREATE TABLE dbo.SomeTable(ID int IDENTITY, SomeColumn varchar(500));
INSERT dbo.SomeTable(SomeColumn) VALUES
('this is pure garbage.'),
('this is NOT'),
('this is JUNK'),
('5723452309423 | NA | customer cancelled purchase'
'| refund given | 12.3.2021 | approver is BG'),
('Ex 2 - 54986866 | NA | customer order returned'
'| refund has been given | 12.4.2021 | AKS');
這個查詢,我特意做了保護性和繁瑣,以說明為什么 SQL Server 不是執行此操作的地方:
;WITH x(ID, str) AS
(
SELECT ID, REVERSE(JSON_VALUE(x.value, N'$.a'))
FROM dbo.SomeTable AS s CROSS APPLY OPENJSON
('[{"a":"'
REPLACE(STRING_ESCAPE(REVERSE(SomeColumn), 'json'), ' ', '"},{"a":"')
'"}]')
AS x WHERE [key] = 0
)
SELECT ID, str FROM x
WHERE LEN(str) IN (2,3)
AND str COLLATE Latin1_General_BIN
= UPPER(str) COLLATE Latin1_General_BIN;
回傳此資料:
| ID | 字串 |
|---|---|
| 2 | 不是 |
| 4 | BG |
| 5 | AKS |
- 示例db<>fiddle
uj5u.com熱心網友回復:
您在表格中的資料
declare @a TABLE ( note varchar(max));
INSERT @a(note) VALUES
('5723452309423 | NA | customer cancelled purchase| refund given | 12.3.2021 | approver is BG'),
('54986866 | NA | customer order returned| refund has been given | 12.4.2021 | AKS'),
('58735980490 | NA | order cancelled refund requested| refund processed | 15.4.2021 |processed by : LO'),
('983943795803 | NA |_ refund asked by account owner| refunded')
在 SQL 中,您可以使用此查詢
select note,iif(lastValue = UPPER(lastValue) COLLATE SQL_Latin1_General_CP1_CS_AS,lastValue, null ) init1 from
(select note,right(rtrim(note),charindex(' ',reverse(rtrim(note)) ' ')-1) lastValue from @a) b
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426298.html
下一篇:如何即時連接資料幀
