我有一列字串,我希望從中提取出現在不同情況下的所有連續大寫單詞。這是我擁有的字串型別的示例:
data = pd.DataFrame({
'strings': ['ubicado en QUINTA CALLE, LADO NORTE detras',
'encuentra por AVENIDA NORTE, ARRIBA DE IGLESIA frente a',
'direccion en CENTRO COMERCIAL, SEGUNDO NIVEL junto a']
})
小寫單詞出現的頻率足以將它們用作正則運算式。這是我到目前為止所做的一個例子:
df['extraction'] = df['strings'].str.extract('(?:(?<=ubicado en )|(?<=encuentra por )|(?<=direccion en ))(.*?)(?:(?=\s*detras)|(?=\s*frente\s*a)|(?=\s*junto\s*a))')
但是,我想找到一種方法,只使用第一個小寫單詞,然后應用一個正則運算式來抓取所有連續的大寫單詞。這是我正在尋找的一個例子
df['extraction'] = df['strings'].str.extract('(ubicado\s*en\s*<REGEX>|encuentra\s*por\s*<REGEX>|direccion\s*en\s*<REGEX>)')
這應該導致以下結果:
data = pd.DataFrame({
'extraction': ['QUINTA CALLE, LADO NORTE',
'AVENIDA NORTE, ARRIBA DE IGLESIA',
'CENTRO COMERCIAL, SEGUNDO NIVEL']
})
字串實際上是更長且更復雜的文本,因此我不能簡單地洗掉列中的所有小寫字母。提前感謝您提供的任何幫助!
uj5u.com熱心網友回復:
您可以使用以下內容:
words = '(?:ubicado|encuentra|direccion)'
regex = words '[^A-Z]*([^a-z] )'
data['extraction'] = data['strings'].str.extract(regex)
輸出:
strings extraction
0 ubicado en QUINTA CALLE, LADO NORTE detras QUINTA CALLE, LADO NORTE
1 encuentra por AVENIDA NORTE, ARRIBA DE IGLESIA frente a AVENIDA NORTE, ARRIBA DE IGLESIA
2 direccion en CENTRO COMERCIAL, SEGUNDO NIVEL junto a CENTRO COMERCIAL, SEGUNDO NIVEL
或者,為了避免尾隨非字母字符:
words = '(?:ubicado|encuentra|direccion)'
regex = words '[^A-Z]*([^a-z]*[A-Z] )'
data['extraction'] = data['strings'].str.extract(regex)
輸出:
strings extraction
0 ubicado en QUINTA CALLE, LADO NORTE detras QUINTA CALLE, LADO NORTE
1 encuentra por AVENIDA NORTE, ARRIBA DE IGLESIA frente a AVENIDA NORTE, ARRIBA DE IGLESIA
2 direccion en CENTRO COMERCIAL, SEGUNDO NIVEL junto a CENTRO COMERCIAL, SEGUNDO NIVEL
uj5u.com熱心網友回復:
您可以使用自定義函式來檢查每個字符的大寫字母。然后對 DataFrame 中的每個單元格使用 lambda 函式:
import pandas as pd
def check_upper(str):
output = []
for x in str:
if x.isupper() or x==" " or x==",":
output.append(x)
return "".join(output).strip().strip(",")
data = pd.DataFrame({
'strings': ['ubicado en QUINTA CALLE, LADO NORTE detras',
'encuentra por AVENIDA NORTE, ARRIBA DE IGLESIA frente a',
'direccion en CENTRO COMERCIAL, SEGUNDO NIVEL junto a']
})
data["strings"] = data["strings"].apply(lambda x: check_upper(x))
data
輸出:
strings
0 QUINTA CALLE, LADO NORTE
1 AVENIDA NORTE, ARRIBA DE IGLESIA
2 CENTRO COMERCIAL, SEGUNDO NIVEL
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476801.html
下一篇:Json檔案未通過電源查詢加載
