J'ai un jeu de données appelé Data. Theres une colonne appelée NetworkDomain qui ressemble à ceci, Data ['NetworkDomain']: Je voudrais filtrer toutes les valeurs se terminant par ".com" ou ".NET" à l'aide de Regex et Attribuez toutes les autres valeurs comme 0. p> J'ai essayé les données ['NetworkDomain'] [Data ['NetworkDomain']. str.contains (". Com $ | .NET $", regex = vrai) ] Qui retourne: p> Comment puis-je définir toutes les autres valeurs dans les données [NetworkDomain] qui ne sont pas ".net" ou ".com 'pour être 0? < / p> p>
3 Réponses :
Vous pouvez utiliser dataframe.apply code>, qui appliquera une fonction sur un axe du Dataframe code>. >>> import re
>>> import pandas as pd
>>> regex = re.compile(r".com$|.net$")
>>>
>>> def my_func(row):
... if regex.search(row):
... return row
... return 0 # default
...
>>> df = pd.DataFrame(
... [
... {"Domain": " amazonaws.com"},
... {"Domain": " amazonaws2.com"},
... {"Domain": " amazonaws.net"},
... {"Domain": "(not set)"},
... ]
... )
>>>
>>> df["Domain"] = df["Domain"].apply(my_func)
>>> print(df)
Domain
0 amazonaws.com
1 amazonaws2.com
2 amazonaws.net
3 0
Déterminez la ligne qui ne satisfait pas la condition et modifie la valeur de cette ligne
Utilisez DataFrame.apply () Pour appliquer une fonction à chaque ligne de la série, Remarque L'argument ARGS doit être transmis sous forme de tuple:
from pandas import DataFrame
import re
d={'col': [1,2,3], 'col2': ['a.net',2,3]}
df=DataFrame(columns=d.keys(), data=d)
def mask0(s, pattern):
s =str(s)
if re.match(pattern, s):
return s
else:
return 0
pat = re.compile('.+[\.net|\.com]')
df['col2'] = df['col2'].apply(mask0, args=(pat,))
print(df)
'0', null, ou voulez-vous dire que vous voulez supprimer ces valeurs?
Salut luuk je voulais dire '0'.