python - 在 pandas 单元格中显示 numpy 数组的自定义信息
问题描述
数据框的某些列包含大numpy
ndarray
s。
这使得在 Jupyter 中以及在文本中以及在 PyCharm 中调试期间显示数据帧非常慢。
此外,由于 pandas 试图显示这些数组的某些部分,因此该表看起来很臃肿且没有提供信息。
我正在寻找一种根据单元格的数据类型(但不一定)理想地自定义格式的方法,以便它可以自动工作而无需每次都显式调用格式函数,例如df.to_html(formatters={...})
我努力了:
设置全局数组格式
np.set_string_function(...)
但被熊猫显示机制忽略。我所拥有的最好的
_repr_html_()
方法是为每个这样的数据框替换方法。
不是一个很好的解决方案,因为它需要在每次更改数据框时重新应用,
例如df[x] = df.apply(...)
有没有更好的方法来定义特定单元格类型的格式化程序?
解决方案
定义一个包含数组的类,并显示所需的摘要:
In [90]: class Foo:
...: def __init__(self,arr):
...: self.arr = arr
...: def __repr__(self):
...: return f'Foo ({self.arr.shape}), ({self.arr.dtype})'
...:
In [91]: Foo(np.arange(3))
Out[91]: Foo ((3,)), (int64)
In [92]: Foo(np.ones((1000,10)))
Out[92]: Foo ((1000, 10)), (float64)
用这些对象而不是“原始”数组填充您的数据框:
In [93]: df = pd.DataFrame([Foo(np.arange(3)),Foo(np.ones((1000,10))),None], columns=['data'])
In [94]: df
Out[94]:
data
0 Foo ((3,)), (int64)
1 Foo ((1000, 10)), (float64)
2 None
推荐阅读
- symfony - 如何从 Nelmio Docs 中隐藏 Api-plaform Docs
- c# - ASP Classic:执行 2 个日期的相同减法并在 C# 值中获得相同的值
- python - 在python中将yield与if / else循环结合起来
- javascript - 使用 Google Apps 脚本从 Google 表单回复中提取回复者电子邮件
- jquery - 无法从 Bootstrap-datetimepicker 获取所选日期的值
- mysql - 我们可以在使用 sequelize js 节点在 mysql 表中插入数据后给时间吗
- angular - TypeError:无法读取未定义的属性“食物”
- python - python中的行分析类实例化
- azure-application-insights - 队列侦听器的 Application Insights 依赖项跟踪
- python - 如何使用 Python 脚本与打开的 Rhino3D 应用程序交互