web-dev-qa-db-fra.com

Comment tracer deux colonnes d'un pandas cadre de données à l'aide de points?

J'ai un bloc de données pandas et j'aimerais tracer les valeurs d'une colonne par rapport à celles d'une autre colonne. Heureusement, il existe une méthode plot associée aux trames de données qui semble faire ce dont j'ai besoin:

df.plot(x='col_name_1', y='col_name_2')

Malheureusement, il semble que parmi les styles de tracé (listés ici après le paramètre kind), il n'y a pas de points. Je peux utiliser des lignes ou des barres ou même de la densité mais pas des points. Existe-t-il un moyen de contourner le problème qui puisse aider à résoudre ce problème?.

78
Roman

Vous pouvez spécifier la style de la ligne tracée lorsque vous appelez df.plot :

_df.plot(x='col_name_1', y='col_name_2', style='o')
_

L'argument style peut également être un dict ou list, par exemple:

_import numpy as np
import pandas as pd

d = {'one' : np.random.Rand(10),
     'two' : np.random.Rand(10)}

df = pd.DataFrame(d)

df.plot(style=['o','rx'])
_

Tous les formats acceptés sont répertoriés dans la documentation de matplotlib.pyplot.plot .

Output

93
sodd

Pour cela (et la plupart des complot), je ne me fierais pas aux Pandas wrappers to matplotlib. Au lieu de cela, utilisez directement matplotlib:

import matplotlib.pyplot as plt
plt.scatter(df['col_name_1'], df['col_name_2'])
plt.show() # Depending on whether you use IPython or interactive mode, etc.

et rappelez-vous que vous pouvez accéder à un tableau NumPy des valeurs de la colonne avec df.col_name_1.values par exemple.

J'ai eu des difficultés à utiliser ceci avec Pandas le traçage par défaut dans le cas d'une colonne de valeurs Timestamp avec une précision à la milliseconde. En essayant de convertir les objets en type datetime64, j'ai également découvert un problème désagréable: < Pandas donne un résultat incorrect lorsque vous demandez si les valeurs de colonne Timestamp ont un type astuce >.

69
ely

Pandas utilise matplotlib comme bibliothèque pour les tracés de base. La manière la plus simple dans votre cas utilisera les éléments suivants:

import pandas as pd
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.Rand(20),
      'col_name_2': np.random.Rand(20)}
df= pd.DataFrame(sample_data)
df.plot(x='col_name_1', y='col_name_2', style='o')

enter image description here

Cependant, je recommanderais d'utiliser seaborn comme solution alternative si vous souhaitez disposer de tracés plus personnalisés sans entrer dans le niveau de base de matplotlib.. Dans ce cas, la solution sera la suivante:

import pandas as pd
import seaborn as sns
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.Rand(20),
      'col_name_2': np.random.Rand(20)}
df= pd.DataFrame(sample_data)
sns.scatterplot(x="col_name_1", y="col_name_2", data=df)

enter image description here

1
Dr. Arslan