Maison >développement back-end >Tutoriel Python >Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

高洛峰
高洛峰original
2017-02-13 13:32:122343parcourir

Avant-propos

Le nettoyage des données est une tâche complexe et fastidieuse (kubi), et c'est aussi le maillon le plus important de tout le processus d'analyse des données. Certaines personnes disent que 80 % du temps consacré à un projet d’analyse est consacré au nettoyage des données. Cela semble étrange, mais c’est vrai dans le travail réel. Le nettoyage des données a deux objectifs. Le premier est de rendre les données disponibles via le nettoyage. La seconde consiste à rendre les données plus adaptées à une analyse ultérieure. En d’autres termes, il y a des données « sales » qui doivent être nettoyées, et des données propres qui doivent également être nettoyées.

Dans l'analyse de données, en particulier l'analyse de texte, le traitement des caractères nécessite beaucoup d'énergie, donc comprendre le traitement des caractères est également une capacité très importante pour l'analyse des données.

Méthodes de traitement des chaînes

Tout d'abord, comprenons quelles sont les méthodes de base.

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

Tout d'abord tout, comprenons La méthode de division de chaîne suivante

str='i like apple,i like bananer'
print(str.split(','))

Le résultat de la division de la chaîne de caractères avec des virgules :

[ 'j'aime pomme', 'j'aime bananer']

print(str.split(' '))

Le résultat du fractionnement en fonction des espaces :

[ 'i', 'like', 'apple,i', 'like', 'bananer']

print(str.index(','))
print(str.find(','))

Les deux résultats de recherche sont :

12

Si l'index est introuvable, l'index renvoie une erreur et find renvoie -1

print(str.count('i'))

Le résultat est :

4

connt est utilisé pour compter la fréquence de la chaîne cible

print(str.replace(',', ' ').split(' '))

Le résultat est :

['i', 'like', 'pomme', 'i', 'like', 'banane']

Ici, replace remplace les virgules par des espaces, puis utilise des espaces pour diviser la chaîne, juste assez pour extraire chaque mot.

En plus des méthodes conventionnelles, l'outil de traitement de caractères le plus puissant est celui des expressions régulières.

Expressions régulières

Avant d'utiliser des expressions régulières, nous devons comprendre les nombreuses méthodes des expressions régulières.

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

Permettez-moi d'examiner l'utilisation de la méthode suivante. Tout d'abord, comprenez la différence entre les méthodes de correspondance et de recherche

str = "Cats are smarter than dogs"
pattern=re.compile(r'(.*) are (.*?) .*')
result=re.match(pattern,str)

for i in range(len(result.groups())+1):
 print(result.group(i))
<.>

Le résultat est :


Les chats sont plus intelligents que les chiens

Les chats
plus intelligents

Sous cette forme de règle de correspondance de pettern , match et Le résultat de retour de la méthode de recherche est le même


À ce moment, si le modèle est modifié en

pattern=re.compile(r&#39;are (.*?) .*&#39;)

match alors aucun ne sera renvoyé, les résultats de recherche renvoyés sont :


sont plus intelligents que les chiens

plus intelligents

Ensuite, apprenons l'utilisation des autres méthodes

str = "138-9592-5592 # number"
pattern=re.compile(r&#39;#.*$&#39;)
number=re.sub(pattern,&#39;&#39;,str)
print(number)

Le résultat est :


138-9592-5592


Le ci-dessus se fait en remplaçant le contenu après le signe # par vide Pour atteindre l'objectif d'extraire le numéro.


Nous pouvons remplacer davantage la barre transversale du numéro

print(re.sub(r&#39;-*&#39;,&#39;&#39;,number))

Le résultat est :


13895925592


On peut également utiliser la méthode find pour imprimer la chaîne trouvée

str = "138-9592-5592 # number"
pattern=re.compile(r&#39;5&#39;)
print(pattern.findall(str))

Le résultat est :


['5', '5', '5']

Le contenu global de l'expression régulière est relativement volumineux et nous devons avoir suffisamment de règles pour faire correspondre les chaînes Comprendre , voici les règles de correspondance spécifiques.

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

Fonction de chaîne vectorisée

Lors du nettoyage des données dispersées à analyser, il est souvent nécessaire de faire un travail de régularisation de chaîne .

data = pd.Series({&#39;li&#39;: &#39;120@qq.com&#39;,&#39;wang&#39;:&#39;5632@qq.com&#39;,
 &#39;chen&#39;: &#39;8622@xinlang.com&#39;,&#39;zhao&#39;:np.nan,&#39;sun&#39;:&#39;5243@gmail.com&#39;})
print(data)

Le résultat est :

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

Les données peuvent être préalablement traitées par certaines méthodes de régulation et intégration Par exemple, utilisez contain pour déterminer si chaque donnée contient le mot-clé

print(data.str.contains(&#39;@&#39;))

Le résultat est :

Explication détaillée du traitement des chaînes dans la série de nettoyage de données PythonVous pouvez également diviser la chaîne et extraire la chaîne requise

data = pd.Series({&#39;li&#39;: &#39;120@qq.com&#39;,&#39;wang&#39;:&#39;5632@qq.com&#39;,
     &#39;chen&#39;: &#39;8622@xinlang.com&#39;,&#39;zhao&#39;:np.nan,&#39;sun&#39;:&#39;5243@gmail.com&#39;})
pattern=re.compile(r&#39;(\d*)@([a-z]+)\.([a-z]{2,4})&#39;)
result=data.str.match(pattern) #这里用fillall的方法也可以result=data.str.findall(pattern)
print(result)

结果为:

chen [(8622, xinlang, com)]
li [(120, qq, com)]
sun [(5243, gmail, com)]
wang [(5632, qq, com)]
zhao NaN
dtype: object

此时加入我们需要提取邮箱前面的名称

print(result.str.get(0))

结果为:

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

或者需要邮箱所属的域名

print(result.str.get(1))

结果为:

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

当然也可以用切片的方式进行提取,不过提取的数据准确性不高

data = pd.Series({&#39;li&#39;: &#39;120@qq.com&#39;,&#39;wang&#39;:&#39;5632@qq.com&#39;,
    &#39;chen&#39;: &#39;8622@xinlang.com&#39;,&#39;zhao&#39;:np.nan,&#39;sun&#39;:&#39;5243@gmail.com&#39;})
print(data.str[:6])

结果为:

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

最后我们了解下矢量化的字符串方法

Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python

更多Explication détaillée du traitement des chaînes dans la série de nettoyage de données Python相关文章请关注PHP中文网!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn