Home > Enterprise >  Extract words after a symbol in python
Extract words after a symbol in python

Time:04-17

I have the following data where i would like to extract out source= from the values. Is there a way to create a general regex function so that i can apply on other columns as well to extract words after equal sign?

Data                      Data2
source=book               social-media=facebook
source=book               social-media=instagram 
source=journal            social-media=facebook

Im using python and i have tried the following:

df['Data'].astype(str).str.replace(r'[a-zA-Z]\=', '', regex=True)

but it didnt work

CodePudding user response:

you can try this :

df.replace(r'[a-zA-Z] -?[a-zA-Z] =', '', regex=True)

It gives you the following result :

      Data      Data2
0     book   facebook
1     book  instagram
2  journal   facebook

CodePudding user response:

Regex is not required in this situation:

print(df['Data'].apply(lambda x : x.split('=')[-1]))
print(df['Data2'].apply(lambda x : x.split('=')[-1]))

CodePudding user response:

You have to repeat the character class 1 or more times and you don't have to escape the equals sign.

What you can do is make the match a bit broader matching all characters except a whitespace char or an equals sign.

Then set the result to the new value.

import pandas as pd

data = [
    "source=book",
    "source=journal",
    "social-media=facebook",
    "social-media=instagram"
]

df = pd.DataFrame(data, columns=["Data"])
df['Data'] = df['Data'].astype(str).str.replace(r'[^\s=] =', '', regex=True)
print(df)

Output

        Data
0       book
1    journal
2   facebook
3  instagram

If there has to be a value after the equals sign, you can also use str.extract

df['Data'] = df['Data'].astype(str).str.extract(r'[^\s=] =([^\s=] )')
  • Related