web-dev-qa-db-fra.com

Créer Pandas Dataframe entre deux tableaux Numpy, puis dessiner un nuage de points

Je suis relativement nouveau avec numpy et pandas (je suis un physicien expérimental, donc j'utilise ROOT depuis des années ...). Un tracé courant dans ROOT est un nuage de points 2D où , étant donné une liste de valeurs x et y, crée un diagramme de dispersion de type "heatmap" d'une variable par rapport à l'autre.

Comment est-ce mieux accompli avec numpy et Pandas? J'essaie d'utiliser la fonction Dataframe.plot(), mais j'ai du mal à créer le Dataframe.

import numpy as np
import pandas as pd
x = np.random.randn(1,5)
y = np.sin(x)
df = pd.DataFrame(d)

Tout d'abord, cette trame de données a la forme (1,2), mais je voudrais qu'elle ait la forme (5,2). Si je peux obtenir la structure de données la bonne forme, je suis sûr que je peux comprendre la fonction DataFrame.plot() pour dessiner ce que je veux.

25
n3utrino

Il existe plusieurs façons de créer des DataFrames. Étant donné les vecteurs de colonne à 1 dimension, vous pouvez créer un DataFrame en lui passant un dict dont les clés sont des noms de colonne et dont les valeurs sont les vecteurs de colonne à 1 dimension:

import numpy as np
import pandas as pd
x = np.random.randn(5)
y = np.sin(x)
df = pd.DataFrame({'x':x, 'y':y})
df.plot('x', 'y', kind='scatter')
53
unutbu

En complément, vous pouvez utiliser pandas Series, mais le DataFrame doit avoir été créé.

import numpy as np
import pandas as pd

x = np.linspace(0,2*np.pi)
y = np.sin(x)

#df = pd.DataFrame()
#df['X'] = pd.Series(x)
#df['Y'] = pd.Series(y)

# You can MIX
df = pd.DataFrame({'X':x})
df['Y'] = pd.Series(y) 

df.plot('X', 'Y', kind='scatter')

C'est une autre façon qui pourrait aider

import numpy as np
import pandas as pd

x = np.linspace(0,2*np.pi)
y = np.sin(x)

df = pd.DataFrame(data=np.column_stack((x,y)),columns=['X','Y'])

Et aussi, je trouve les exemples de karlijn (DatacCamp) très utiles

import numpy as np
import pandas as pd

TAB = np.array([[''     ,'Col1','Col2'],
                 ['Row1' ,   1  ,   2  ],
                 ['Row2' ,   3  ,   4  ],
                 ['Row3' ,   5 ,   6  ]])

dados = TAB[1:,1:]
linhas = TAB[1:,0]
colunas = TAB[0,1:]

DF = pd.DataFrame(
    data=dados,
    index=linhas,
    columns=colunas
)

print('\nDataFrame:', DF)
3
famaral42

Pour faire ce que vous voulez, je n'utiliserais pas les méthodes de traçage DataFrame. Je suis également un ancien physicien expérimental, et sur la base de mon expérience avec ROOT, je pense que l'analogue Python que vous voulez est mieux réalisé en utilisant matplotlib. Dans matplotlib.pyplot il y a une méthode, hist2d () , qui vous donnera le type de carte thermique que vous recherchez.

Quant à la création de la trame de données, un moyen simple de le faire est:

df=pd.DataFrame({'x':x, 'y':y})
3
RKD314