在两个Numpy数组之间创建Pandas Dataframe,然后绘制散点图

n3u*_*ino 27 python numpy scatter pandas

我对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)
Run Code Online (Sandbox Code Playgroud)

首先,这个数据框有形状(1,2),但我希望它有形状(5,2).如果我能够使数据帧具有正确的形状,我相信我可以找出DataFrame.plot()绘制我想要的功能.

unu*_*tbu 54

有许多方法可以创建DataFrame.给定1维列向量,您可以通过向其传递一个dict来创建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')
Run Code Online (Sandbox Code Playgroud)


RKD*_*314 7

为了做你想做的事,我不会使用 DataFrame 绘图方法。我也是一名前实验物理学家,根据 ROOT 的经验,我认为你想要的 Python 模拟最好使用 matplotlib 来完成。在 matplotlib.pyplot 中,有一个方法 hist2d(),它将为您提供您正在寻找的热图类型。

至于创建数据框,一个简单的方法是:

df=pd.DataFrame({'x':x, 'y':y})
Run Code Online (Sandbox Code Playgroud)


fam*_*l42 5

作为补充,您可以使用pandas Series,但必须已创建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')
Run Code Online (Sandbox Code Playgroud)

这是另一种可能有帮助的方法

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'])
Run Code Online (Sandbox Code Playgroud)

而且,我发现来自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)
Run Code Online (Sandbox Code Playgroud)