Maison >développement back-end >Tutoriel Python >nettoyage des données python, fusion, conversion, filtrage, tri des données
Nous avons utilisé des pandas pour effectuer certaines opérations de base plus tôt. Ensuite, nous en apprendrons davantage sur les opérations de données
Le nettoyage des données a toujours été une partie extrêmement importante de l'analyse des données.
Fusion de données
Chez les pandas, les données peuvent être fusionnées via la fusion.
import numpy as np import pandas as pd data1 = pd.DataFrame({'level':['a','b','c','d'], 'numeber':[1,3,5,7]}) data2=pd.DataFrame({'level':['a','b','c','e'], 'numeber':[2,3,6,10]}) print(data1)
Le résultat est :
print(data2)
Le résultat est :
print(pd.merge(data1,data2))
Le résultat est :
Vous pouvez voir que les champs utilisés pour la même étiquette dans data1 et data2 sont affichés, tandis que les autres champs sont ignorés, ce qui équivaut à l'intérieur rejoindre l'opération de connexion dans SQL.
De plus, il existe des méthodes de connexion telles que externe, ringt, left, etc., qui sont représentées par le mot-clé how.
data3 = pd.DataFrame({'level1':['a','b','c','d'], 'numeber1':[1,3,5,7]}) data4=pd.DataFrame({'level2':['a','b','c','e'], 'numeber2':[2,3,6,10]}) print(pd.merge(data3,data4,left_on='level1',right_on='level2'))
Le résultat est :
Dans les deux trames de données Si les noms de colonnes sont différents, nous pouvons connecter les données entre elles en spécifiant les deux paramètres letf_on et right_on
print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))
Le résultat est :
Autres descriptions détaillées des paramètres
Fusion de données qui se chevauchent
Parfois, nous rencontrons des données qui se chevauchent et doivent être fusionnées. Dans ce cas, nous pouvons utiliser la fonction comebine_first.
data3 = pd.DataFrame({'level':['a','b','c','d'], 'numeber1':[1,3,5,np.nan]}) data4=pd.DataFrame({'level':['a','b','c','e'], 'numeber2':[2,np.nan,6,10]}) print(data3.combine_first(data4))
Le résultat est :
Vous pouvez voir le mêmes balises Le contenu ci-dessous affiche d'abord le contenu de data3 Si certaines données d'un bloc de données sont manquantes, les éléments d'un autre bloc de données seront remplis.
L'utilisation ici est similaire à np. .where(isnull(a),b,a)
Remodelage des données et rotation axiale
Nous avons mentionné ce contenu dans l'article précédent sur les pandas . Le remodelage des données utilise principalement la fonction de remodelage, et la rotation utilise principalement les fonctions de dépilage et de pile.
data=pd.DataFrame(np.arange(12).reshape(3,4), columns=['a','b','c','d'], index=['wang','li','zhang']) print(data)
Le résultat est :
print(data.unstack())
Le résultat est :
Conversion de données
Supprimer les données de ligne en double
data=pd.DataFrame({'a':[1,3,3,4], 'b':[1,3,3,5]}) print(data)
Le résultat est :
print(data.duplicated())
Le résultat est :
On peut voir que la troisième ligne répète les données de la deuxième ligne, donc l'affichage le résultat est vrai
另外用drop_duplicates方法可以去除重复行
print(data.drop_duplicates())
结果为:
替换值
除了使用我们上一篇文章中提到的fillna的方法外,还可以用replace方法,而且更简单快捷
data=pd.DataFrame({'a':[1,3,3,4], 'b':[1,3,3,5]}) print(data.replace(1,2))
结果为:
多个数据一起换
print(data.replace([1,4],np.nan))
数据分段
data=[11,15,18,20,25,26,27,24] bins=[15,20,25] print(data) print(pd.cut(data,bins))
结果为:
[11, 15, 18, 20, 25, 26, 27, 24][NaN, NaN, (15, 20], (15, 20], (20, 25], NaN, NaN, (20, 25]]
Categories (2, object): [(15, 20] < (20, 25]]
可以看出分段后的结果,不在分段内的数据显示为na值,其他则显示数据所在的分段。
print(pd.cut(data,bins).labels)
结果为:
[-1 -1 0 0 1 -1 -1 1]
显示所在分段排序标签
print(pd.cut(data,bins).levels)
结果为:
Index([‘(15, 20]', ‘(20, 25]'], dtype='object')
显示所以分段标签
print(value_counts(pd.cut(data,bins)))
结果为:
显示每个分段值得个数
此外还有一个qcut的函数可以对数据进行4分位切割,用法和cut类似。
排列和采样
我们知道排序的方法有好几个,比如sort,order,rank等函数都能对数据进行排序
现在要说的这个是对数据进行随机排序(permutation)
data=np.random.permutation(5) print(data)
结果为:
[1 0 4 2 3]
这里的peemutation函数对0-4的数据进行随机排序的结果。
也可以对数据进行采样
df=pd.DataFrame(np.arange(12).reshape(4,3)) samp=np.random.permutation(3) print(df)
结果为:
print(samp)
结果为:
[1 0 2]
print(df.take(samp))
结果为:
这里使用take的结果是,按照samp的顺序从df中提取样本。
更多python 数据清洗之数据合并、转换、过滤、排序相关文章请关注PHP中文网!