You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中让Open3D读取Pandas DataFrame并生成点云

Pandas DataFrame转Open3D点云的正确方法

问题场景

我通过以下代码从CSV文件提取XYZ坐标,得到Pandas DataFrame:

import pandas as pd
import open3d as o3d
import numpy as np

data = pd.read_csv("./assets/landmarks_frame0.csv", header=None, usecols=range(1,4))
print(data)

数据正常,前三列对应x、y、z坐标。但尝试用o3d.io.read_point_cloud(data, format="xyz")生成点云时触发TypeError,因为该函数仅接受字符串类型的文件名参数,无法直接传入DataFrame。

解决方案

不需要通过文件中转,直接将DataFrame转换为numpy数组,再赋值给Open3D的PointCloud对象即可。完整代码如下:

# 读取CSV得到DataFrame
data = pd.read_csv("./assets/landmarks_frame0.csv", header=None, usecols=range(1,4))

# 将DataFrame转换为numpy数组(推荐用to_numpy,替代旧的values属性)
points_array = data.to_numpy(dtype=np.float32)

# 初始化Open3D点云对象
pcd = o3d.geometry.PointCloud()
# 将numpy数组转换为Open3D支持的点格式并赋值
pcd.points = o3d.utility.Vector3dVector(points_array)

# 验证并可视化
print(pcd)
print(np.asarray(pcd.points))
o3d.visualization.draw_geometries([pcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795],
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024])

关键说明

  • o3d.utility.Vector3dVector:负责将numpy数组转换为Open3D内部兼容的点数据结构,支持float64类型;如果需要用float32,可改用Vector3fVector。
  • 直接操作内存数据比写入再读取文件更高效,避免了IO开销。

内容的提问来源于stack exchange,提问作者EnshenZhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:18:18