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

Creating Pandas Dataframe between two Numpy arrays, then draw scatter plot

我对 numpy 和 pandas 比较陌生(我是一名实验物理学家,所以多年来我一直在使用 ROOT...)。 ROOT 中的一个常见图是二维散点图,其中,给定 x 和 y 值列表,制作一个变量与另一个变量的 "heatmap" 类型散点图。

如何使用 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)

首先,此数据框的形状为 (1,2),但我希望它的形状为 (5,2)。 如果我能得到正确形状的数据框,我相信我能找出 DataFrame.plot() 函数来绘制我想要的东西。

创建 DataFrame 的方法有很多种。给定一维列向量,您可以通过向其传递一个字典来创建 DataFrame,字典的键是列名,值是一维列向量:

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

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

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

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

互补,可以用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)