Pandas Merge, Join et concatenation

Python est un langage adapté pour l’analyse de donnée, le package Pandas est central dans la gestion et l’analyse de donnée ainsi que leur importation. Dans cet article voyons le join, merge, concatenate.

Introduction – Pandas Merge Join et concat

La librairie pandas est caractérisée par l’objet DataFrame qui permet de manipuler des données facilement et efficacement.

Pour installer pandas si ce n’est pas encore le cas sur votre poste :

pip install pandas

Aussi vous pouvez consulter sur ce site : https://pandas.pydata.org/pandas-docs/stable/getting_started/install.html

Vous pouvez vérifier facilement la version installée sur votre machine en exécutant le code python suivant :

import pandas as pd 
print(pd.__version__)

Vous obtenez par exemple :

pandas csv - Comment charger/sauvegarder avec pandas en Python ?
Vérifier la version de pandas installée

Concatener des DataFrame en utilisant la fonction .concat() :

Voici un exemple :

import pandas as pd 
data1 = {'Ville':['Paris','Marseille','Lyon'],'CodePostal':['75000','13000','69000']}
data2 = {'Ville':['Metz','Brest','Perpignan'],'CodePostal':['57000','29200','66000']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
res1 = pd.concat([df1,df2])

print('****** Datafram 1 ******')
print(df1)
print('****** Datafram 2 ******')
print(df2)
print('****** Concat ******')
print(res1)

Voici la sortie :

****** Datafram 1 ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
****** Datafram 2 ******
       Ville CodePostal
0       Metz      57000
1      Brest      29200
2  Perpignan      66000
****** Concat ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
0       Metz      57000
1      Brest      29200
2  Perpignan      66000
Pandas Merge, Join et concatenation

Concaténer sur un axe différent :

Exemple de concaténation avec pandas sur un axe différent :

import pandas as pd 
data1 = {'Ville':['Paris','Marseille','Lyon'],'CodePostal':['75000','13000','69000']}
data2 = {'Ville':['Metz','Brest','Perpignan'],'CodePostal':['57000','29200','66000']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
res1 = pd.concat([df1, df2], axis=1, join='inner')

print('****** Datafram 1 ******')
print(df1)
print('****** Datafram 2 ******')
print(df2)
print('****** Concat on different axes ******')
print(res1)

La sortie est la suivante :

****** Datafram 1 ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
****** Datafram 2 ******
       Ville CodePostal
0       Metz      57000
1      Brest      29200
2  Perpignan      66000
****** Intersection ******
       Ville CodePostal      Ville CodePostal
0      Paris      75000       Metz      57000
1  Marseille      13000      Brest      29200
2       Lyon      69000  Perpignan      66000

Autre exemple avec .append():

import pandas as pd 
data1 = {'Ville':['Paris','Marseille','Lyon'],'CodePostal':['75000','13000','69000']}
data2 = {'Ville':['Metz','Brest','Perpignan'],'CodePostal':['57000','29200','66000']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
res1 = df1.append(df2)

print('****** Datafram 1 ******')
print(df1)
print('****** Datafram 2 ******')
print(df2)
print('****** Append ******')
print(res1)

Et la sortie est :

****** Datafram 1 ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
****** Datafram 2 ******
       Ville CodePostal
0       Metz      57000
1      Brest      29200
2  Perpignan      66000
****** Append ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
0       Metz      57000
1      Brest      29200
2  Perpignan      66000

Merge de dataframe avec pandas :

Voici un exemple de merge :

import pandas as pd 
data1 = {'Ville':['Paris','Marseille','Lyon'],'CodePostal':['75000','13000','69000']}
data2 = {'Ville':['Metz','Brest','Perpignan','Paris'],'CodePostal':['57000','29200','66000','75001']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
res1 = res = pd.merge(df1, df2, on='Ville')

print('****** Datafram 1 ******')
print(df1)
print('****** Datafram 2 ******')
print(df2)
print('****** Merging ******')
print(res1)

Voici la sortie :

****** Datafram 1 ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
****** Datafram 2 ******
       Ville CodePostal
0       Metz      57000
1      Brest      29200
2  Perpignan      66000
3      Paris      75001
****** Merging ******
   Ville CodePostal_x CodePostal_y
0  Paris        75000        75001

Jointure pandas python :

import pandas as pd 
data1 = {'Ville':['Paris','Marseille','Lyon'],'CodePostal':['75000','13000','69000']}
data2 = {'Ville2':['Metz','Brest','Perpignan','Paris'],'Nbhabitant':['10000','20000','30000','40000']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
res1 = df1.join(df2,how='inner')

print('****** Datafram 1 ******')
print(df1)
print('****** Datafram 2 ******')
print(df2)
print('****** Join ******')
print(res1)
****** Datafram 1 ******
       Ville CodePostal
0      Paris      75000
1  Marseille      13000
2       Lyon      69000
****** Datafram 2 ******
      Ville2 Nbhabitant
0       Metz      10000
1      Brest      20000
2  Perpignan      30000
3      Paris      40000
****** Join ******
       Ville CodePostal     Ville2 Nbhabitant
0      Paris      75000       Metz      10000
1  Marseille      13000      Brest      20000
2       Lyon      69000  Perpignan      30000

https://128mots.com/index.php/category/python/

pandas csv – Comment charger/sauvegarder avec pandas en Python ?

Python est un langage adapté pour l’analyse de donnée, le package Pandas est central dans la gestion et l’analyse de donnée ainsi que leur importation. Dans cet article voyons comment charger un fichier de donnée csv excel par exemple avec pandas.

Introduction

La librairie pandas est caractérisée par l’objet DataFrame qui permet de manipuler des données facilement et efficacement.

Pour installer pandas si ce n’est pas encore le cas sur votre poste :

pip install pandas

Aussi vous pouvez consulter sur ce site : https://pandas.pydata.org/pandas-docs/stable/getting_started/install.html

Vous pouvez vérifier facilement la version installée sur votre machine en exécutant le code python suivant :

import pandas as pd 
print(pd.__version__)

Vous obtenez par exemple :

pandas csv - Comment charger/sauvegarder avec pandas en Python ?
Vérifier la version de pandas installée

Charger un fichier csv dans un dataframe pandas :

Pour charger un fichier csv avec python c’est assez simple : vous utilisez la fonction read_csv avec une url ou un fichier en local.

blockdata = pd.read_csv('./blockdata.txt',index_col=0, parse_dates=True)

Voici quelques paramètres utiles :

ParamètreUtilisation
seppermet de préciser un séparateur différent du séparateur par défaut ‘,’
index_colPermet de préciser la colonne à utiliser comme index
use_colsPermet de préciser les colonnes à utiliser

Sauvegarder/Enregistrer un dataframe pandas dans un fichier csv :

Exemple de sauvegarde :

blockdata.to_csv('outblock4.csv')

https://128mots.com/index.php/category/python/

Implémentation Python de l’algorithme de Bellman-Ford

Introduction – algorithme de Bellman-Ford python

Cet article fait suite à d’autres article sur l’implémentation python d’algorithme : l’article suivant sur l’algorithme de Dijkstra : https://128mots.com/index.php/2021/03/01/implementation-python-de-lalgorithme-de-floyd-warshall/

def bellmanFord(graph, sommetDepart):
    distances = {} 
    predecesseurs = {}
    for sommet in graph:
        distances[sommet] = np.inf
        predecesseurs[sommet] = None
    distances[sommetDepart] = 0
    

    for i in range(len(graph)-1):
        for j in graph:
            for k in graph[j]: 
                if distances[k] > distances[j] + graph[j][k]:
                    distances[k]  = distances[j] + graph[j][k]
                    predecesseurs[k] = j
    for i in graph:
        for j in graph[i]:
            assert distances[j] <= distances[i] + graph[i][j]

    return distances, predecesseurs

#Liste d'ajacence du graphe
graph = {'A':{'B':15,'C':4},'B':{'E':5},'C':{'E':11,'D':2},'D':{'E':3},'E':{}}
distances, predecesseurs = bellmanFord(graph,'A')
print("Plus courte distance pour chaque sommet de départ :")
for v in distances: print(str(v) + '-' + str(distances[v]))

Implémentation Python de l’algorithme de floyd-warshall

Introduction – algorithme de floyd warshall python

Implémentation Python de l’algorithme de floyd-warshall

Cet article fait suite à d’autres article sur l’implémentation python d’algorithme : l’article suivant sur l’algorithme de Dijkstra : https://128mots.com/index.php/2020/02/17/lalgorithme-de-dijkstra-dans-un-graphe-pondere-et-oriente-en-plus-de-128-mots/

import numpy as np

def floydwarshall(graph):
    distances = {}
    predecesseurs = {}
    for u in graph:
        distances[u] = {}
        predecesseurs[u] = {}
        for v in graph:
            distances[u][v] = np.inf
            predecesseurs[u][v] = -1
        distances[u][u] = 0
        for voisin in graph[u]:
            distances[u][voisin] = graph[u][voisin]
            predecesseurs[u][voisin] = u

    for t in graph:
        for u in graph:
            for v in graph:
                nouvellesDistances = distances[u][t] + distances[t][v]
                if nouvellesDistances < distances[u][v]:
                    distances[u][v] = nouvellesDistances
                    predecesseurs[u][v] = predecesseurs[t][v] 
    return distances, predecesseurs

#Liste d'ajacence du graphe
graph = {'A':{'B':15,'C':4},'B':{'E':5},'C':{'E':11,'D':2},'D':{'E':3},'E':{}}
distances, predecesseurs = floydwarshall(graph)
print("Prédecesseur du sommet d'arrivée dans le chemin le plus court (-1 : chemin impossible):")
for v in predecesseurs: print(str(v) + '' + str(predecesseurs[v]))
print("Plus courte distance pour chaque sommet de départ (inf : chemin impossible) :")
for v in distances: print(str(v) + '' + str(distances[v]))