Создание Pandas Dataframe между двумя массивами Numpy, затем нарисуйте график разброса

Я относительно новый с numpy и pandas (я экспериментальный физик, поэтому я использовал ROOT в течение многих лет...). Общий график в ROOT представляет собой 2D-график разброса, где, учитывая список значений x и y, создается диаграмма рассеяния типа "горячая карта" одной переменной по сравнению с другой.

Как это лучше всего выполнить с numpy и Pandas? Я пытаюсь использовать функцию Dataframe.plot(), но я изо всех сил пытаюсь создать Dataframe.

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

Во-первых, этот dataframe имеет форму (1,2), но я бы хотел, чтобы она имела форму (5,2). Если я получу форму данных правильной формы, я уверен, что могу найти функцию Dataframe.plot(), чтобы нарисовать то, что я хочу.

Ответ 1

Существует несколько способов создания DataFrames. Учитывая одномерные векторы столбцов, вы можете создать DataFrame, передав ему dict, ключи которого являются именами столбцов и значениями которых являются 1-мерные векторы столбцов:

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')

Ответ 2

Чтобы делать то, что вы хотите, я бы не использовал методы построения DataFrame. Я также бывший физик-экспериментатор, и, основываясь на опыте с ROOT, я думаю, что нужный вам аналог Python лучше всего использовать с помощью matplotlib. В matplotlib.pyplot есть метод hist2d(), который даст вам вид карты тепла, которую вы ищете.

Что касается создания фрейма данных, то простой способ сделать это:

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

Ответ 3

Дополняя, вы можете использовать pandas Серии, но должен быть создан DataFrame.

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')

Это еще один способ помочь

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'])

А также я нашел примеры из karlijn (DatacCamp) очень полезно

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)