Exemples de comment créer un tableau de données (ou "dataframe") avec pandas sous python:
Créer une simple data frame à partir d'une matrice
Importer les modules pandas et numpy:
>>> import pandas as pd
>>> import numpy as np
Soit la matrice 2D suivante:
\begin{equation}
data = \left( \begin{array}{ccc}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12
\end{array}\right)
\end{equation}
>>> data = np.arange(1,13)
>>> data = data.reshape(3,4)
>>> data
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
On peut alors donner des noms aux colonnes de la matrice
>>> columns = ['Home','Car','Sport','Food']
et aussi donner des noms aux lignes de la matrice:
>>> index = ['Alice','Bob','Emma']
puis créer une dataframe avec pandas:
>>> df = pd.DataFrame(data=data,index=index,columns=columns)
>>> df
Home Car Sport Food
Alice 1 2 3 4
Bob 5 6 7 8
Emma 9 10 11 12
Note: L'avantage d'utiliser une dataframe pandas par rapport aux matrices de numpy et de pouvoir ajouter des informations sur les données comme donner des noms aux colonnes et aux lignes (on peut alors sélectionner une colonne en utilisant son nom plutôt que son indice), et aussi de pouvoir ajouter des metadata.
On peut ne pas donner de noms pour les lignes de la dataframe, dans ce cas les lignes du tableau sont indexées par un entiers automatiquement:
>>> df = pd.DataFrame(data=data,columns=columns)
>>> df
Home Car Sport Food
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
Créer une data frame à partir d'un dictionnaire
Créer une dataframe à partir d'un dictionnaire python (méthode 1)
Pour créer une dataframe à partir d'un dictionnaire python :
d = {
'Name': ['Ben', 'John', 'Emma', 'Zoe'],
'Age': [40, 56, 34, 12]
}
une solution est de faire
import pandas as pd
df = pd.DataFrame(d)
donne
Name Age
0 Ben 40
1 John 56
2 Emma 34
3 Zoe 12
Créer une dataframe à partir d'un dictionnaire python (méthode 2)
Une autre solution consiste à utiliser pandas.DataFrame.from_dict
df = pd.DataFrame.from_dict(d)
print(df)
donne
Name Age
0 Ben 40
1 John 56
2 Emma 34
3 Zoe 12
L'avantage est d'utiliser des paramètres tels que "orient":
df = pd.DataFrame.from_dict(d, orient='index')
donne alors
0 1 2 3
Name Ben John Emma Zoe
Age 40 56 34 12
Ajoutez des noms de colonne :
df = pd.DataFrame.from_dict(d, orient='index', columns=['User 1', 'User 2', 'User 3', 'User 4'])
donne
User 1 User 2 User 3 User 4
Name Ben John Emma Zoe
Age 40 56 34 12
Ajouter une nouvelle ligne dans un dataframe
Autre exemple, ajoutez une nouvelle ligne dans un dataframe existant :
import pandas as pd
d = {
'Name': ['Ben', 'John', 'Emma', 'Zoe'],
'Age': [40, 56, 34, 12]
}
df = pd.DataFrame.from_dict(d)
Name Age
0 Ben 40
1 John 56
2 Emma 34
3 Zoe 12
Créer une nouvelle dataframe à partir d'un dictionnaire python
new_d = {
'Name': ['Paula'],
'Age': [67]
}
df_new_row = pd.DataFrame.from_dict(new_d)
Pour ajouter une nouvelle ligne, une solution consiste à utiliser concat() (voir Comment fusionner / concatener deux dataframes avec pandas en python ? et Comment créer une DataFrame vide avec pandas et la remplir ligne par ligne en python ?)
df = pd.concat([df,df_new_row], ignore_index=True)
donne
Name Age
0 Ben 40
1 John 56
2 Emma 34
3 Zoe 12
4 Paula 67
Corriger l'erreur "If using all scalar values, you must pass an index"
new_d = {
'Name': 'Paula',
'Age': 67
}
df_new_row = pd.DataFrame.from_dict(new_d)
donne
ValueError: If using all scalar values, you must pass an index
C'est parce que les valeurs du dictionnaire new_d ne sont pas une liste.
Pour résoudre ce problème, ajoutez simplement [] :
new_d = {
'Name': ['Paula'],
'Age': [67]
}
df_new_row = pd.DataFrame.from_dict(new_d)
Créer une data frame à partir d'une liste de tuple
Exemple avec une liste de tuple:
>>> data = [(1,2,3,4),(5,6,7,8)]
>>> index = ['Alice','Bob']
>>> columns = ['Home','Car','Sport','Food']
>>> df = pd.DataFrame(data=data,index=index,columns=columns)
>>> df
Home Car Sport Food
Alice 1 2 3 4
Bob 5 6 7 8
Créer une data frame à partir d'un fichier ascii
On peut aussi utiliser read_csv() pour créer une dataframe:
>>> import pandas as pd
>>> df = pd.read_csv('myfile.csv', sep=",", header=None)
>>> df.head()