Создание 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)