首页 > 解决方案 > 在 pandas 单元格中显示 numpy 数组的自定义信息

问题描述

数据框的某些列包含大numpy ndarrays。

这使得在 Jupyter 中以及在文本中以及在 PyCharm 中调试期间显示数据帧非常慢。

此外,由于 pandas 试图显示这些数组的某些部分,因此该表看起来很臃肿且没有提供信息。

我正在寻找一种根据单元格的数据类型(但不一定)理想地自定义格式的方法,以便它可以自动工作而无需每次都显式调用格式函数,例如df.to_html(formatters={...})

我努力了:

有没有更好的方法来定义特定单元格类型的格式化程序?

标签: pythonpandasnumpyformattingdisplay

解决方案


定义一个包含数组的类,并显示所需的摘要:

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

推荐阅读