当前位置: 首页 > 知识库问答 >
问题:

将熊猫DataFrame转换为三维图形,使用索引和列作为X,Y和值作为Z?

皇甫德庸
2023-03-14

我正在尝试用熊猫数据框创建一个3d volatlity曲面,我觉得我已经掌握了所有信息,但我不确定如何从中创建3d图形。我读过的每一本指南似乎都使用了3个独立的数组,但我觉得我拥有的数据应该是可绘制的。

我当前的数据帧如下所示:

我希望我的X值是我的索引,Y值是列名(月份),Z值是框架中包含的实际值(例如,第一行第一列中的第一个值...X=35,Y=9/20/2019,Z=0.0879441)

   09/20/2019   10/18/2019  11/15/2019  12/20/2019  01/17/2020
35  0.0879441   0.0883913   0.0909429   0.0987415   0.0987912
40  0.0833955   0.0837764   0.087088    0.0939974   0.0943858
45  0.0788468   0.0810964   0.084231    0.0905135   0.0912521
50  0.0766043   0.0784164   0.0820014   0.0891319   0.0871471
55  0.0743284   0.0744855   0.0757832   0.0729094   0.068998
60  0.0612799   0.0664453   0.0758287   0.0729539   0.0690739
65  0.0613116   0.0664716   0.0655504   0.0622985   0.0630833

环顾四周后,我试图模仿这里的代码:特别是在第5和第6单元。下面是我的代码

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

X = my_dataframe.index

Y = my_dataframe.columns


def lookup(row, cols):
    return(my_dataframe.loc[x,y])

Z = lookup(x,y)


fig = plt.figure()
ax = plt.axes(projection = '3d')

ax.contour3D(X,Y,Z)

我基本上把Z定义为X,Y的函数,希望这能起作用,但无济于事,我得到一个错误,说:

Length of x must be number of columns in z

我做错了什么?Fwiw我使用链接中的X,Y=np.meshgrid()进行了trued,但这也不起作用,所以我发布了我最初的尝试。

编辑:根据一些评论的建议,我已经把我的代码改为这样:

Y = my_dataframe.index

my_dataframe.columns = [1,2,3,4,5]

X = my_dataframe.columns


Z = my_dataframe.values

fig = plt.figure()
ax = plt.axes(projection = '3d')

ax.contour3D(X,Y, Z)

我将列从日期改为数字,以确保它们是数字类型。我还将Z设置为数据帧的值。我现在得到一个新错误:

 setting an array element with a sequence.

共有1个答案

锺离正祥
2023-03-14

这应该适用于:

import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

d = {10: [1, 2], 20: [3, 4]}
my_dataframe = pd.DataFrame(data=d)
#  10  20
#  ------
#0  1   3
#1  2   4

X = my_dataframe.index

Y = my_dataframe.columns

Z = my_dataframe.values


fig = plt.figure()
ax = plt.axes(projection = '3d')

ax.contour3D(X,Y,Z)
 类似资料:
  • 问题内容: 我有以下熊猫数据框: 我想将日期时间索引转换为数据框的列。我尝试过,但结果没有改变。任何想法? 问题答案: 需要分配输出或参数:

  • 我有以下布尔值表: 我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。 如果一行少于三个真值,则新数据帧将具有空值。

  • 问题内容: 我正在尝试转换以下列表: 像这样的字典: 我尝试了其他职位的答案,但没有任何帮助。我现在有以下代码: 这给了我这个错误: 任何帮助深表感谢。谢谢。 问题答案: 您可以从内置的枚举中获取列表的索引。您只需要反转索引值映射并使用字典理解来创建字典 哦,永远不要将变量命名为内置变量或类型。

  • 问题内容: 我有一个像这样的电子表格: 我不想手动将列与行交换。是否可以使用熊猫将数据读取到列表中,如下所示: 问题答案: 是的,使用set_index可以创建行索引。 如果未提供,则返回修改后的数据帧。 例:

  • 我有一个字段在熊猫DataFrame被导入为字符串格式。它应该是日期时间变量。如何将其转换为日期时间列,然后根据日期进行筛选。 示例: 数据帧名称:原始数据

  • 我以前在python中使用pyodbc,但现在我已经在一台新机器上安装了它(win 8 64位、python 2.7 64位、PythonXY和Spyder)。 我不知道为什么行为会改变。也许是我的Pandas版本,或者是pyodbc,但是更新是有问题的。我试图更新一些模块,但它搞砸了一切,我使用的任何方法(二进制文件--用于正确的机器/安装--PIP安装、easy-install,任何东西!等等