【问题标题】:Creating Pandas Dataframe between two Numpy arrays, then draw scatter plot在两个 Numpy 数组之间创建 Pandas Dataframe,然后绘制散点图
【发布时间】:2015-07-09 02:16:09
【问题描述】:

我对 numpy 和 pandas 比较陌生(我是一名实验物理学家,所以多年来我一直在使用 ROOT……)。 ROOT 中的一个常见图是 2D 散点图,其中给定 x 和 y 值列表,生成一个变量与另一个变量的“热图”类型散点图。

如何用 numpy 和 Pandas 最好地完成这项工作?我正在尝试使用 Dataframe.plot() 函数,但我什至在努力创建数据框。

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() 函数来绘制我想要的东西。

【问题讨论】:

    标签: python numpy pandas scatter


    【解决方案1】:

    补充,你可以使用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')
    

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

    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)
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        有多种方法可以创建 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')
        

        【讨论】:

          猜你喜欢
          • 2017-06-03
          • 2021-05-16
          • 1970-01-01
          • 1970-01-01
          • 2017-08-21
          • 2018-07-21
          • 1970-01-01
          • 1970-01-01
          • 2020-08-15
          相关资源
          最近更新 更多