- 现场演示
- 动画美国的covid-19死亡州死亡
- 3D散点图
- 表面图
- 网络分析
这是什么?
D-Tale是烧瓶后端和React前端的组合,为您带来了一种简单的查看和分析熊猫数据结构的方法。它与ipython笔记本和python/ipython终端无缝集成。当前,该工具支持诸如DataFrame,Series,MultiIndex,DateTimeIndex和RangeIndex之类的熊猫对象。
起源
D-Tale是SAS到Python转换的产物。最初是SAS Insight功能之上的Perl脚本包装器现在是PANDAS数据结构之上的轻量级Web客户端。
在新闻中
- 可以在Python代码的一行中执行EDA的4个库
- 反应状态
- kdnuggets
- 人类研究所(警告:包含弃用的功能)
- python字节
- 烧瓶2020
- 圣地亚哥Python
- 媒介:迈向数据科学
- 媒介:探索性数据分析 - 使用D-Tale
- EOD注意:使用Python和dtale分析相关性
- 数据探索现在非常容易带D/ d-Tale
- 实用业务Python
教程
- PIP安装Python YouTube频道
- Machine_learning_2019
- D-Tale是使用单行代码执行探索性数据分析的最佳库
- 探索和分析带有d-tale的熊猫数据结构
- 数据预处理最简单的方法
相关资源
- 开发D故事时,在烧瓶中冒险
- 将范围选择添加到反应虚拟化
- 构建可拖动/可重大的模式
- 将烧瓶应用程序嵌入流利
内容
- 从哪里得到它
- 入门
- Python终端
- 作为脚本
- Jupyter笔记本
- w/ jupyter服务器代理
- jupyterhub w/ kubernetes
- Docker容器
- Google Colab
- Kaggle
- 活页夹
- r网状
- 没有数据的启动
- 命令行
- 自定义命令行加载程序
- 嵌入您自己的烧瓶应用程序中
- 嵌入您自己的Django应用程序中
- 嵌入精简
- 在枪支上运行D-Tale,带Redis
- 配置
- 验证
- 预定义过滤器
- 使用Swifter
- 宽数据框的行为
- UI
- 尺寸/功能区菜单/主菜单
- 标题
- 调整列大小
- 编辑单元
- 将单元格复制到剪贴板
- 主菜单功能
- XArray Operations, Describe, Outlier Detection, Custom Filter, Dataframe Functions, Merge & Stack, Summarize Data, Duplicates, Missing Analysis, Correlations, Predictive Power Score, Heat Map, Highlight Dtypes, Highlight Missing, Highlight Outliers, Highlight Range, Low Variance Flag, Instances, Code Exports, Export CSV, Load Data & Sample Datasets, Refresh Widths, About, Theme, Reload Data, unvin/pin菜单,语言,关闭
- 列菜单功能
- 过滤,移动列,隐藏列,删除,重命名,替换,锁,解锁,排序,格式,描述(列分析)
- 图表
- 网络查看器
- 热键
- 菜单功能取决于浏览器尺寸
- 对于开发人员
- 克隆
- 运行测试
- 覆盖
- 格式化JS
- Docker Development
- 添加语言支持
- 全球状态/数据存储
- 启动行为
- 文档
- 依赖性
- 致谢
- 执照
从哪里得到它
源代码当前在GitHub上托管:https://github.com/man-group/dtale
最新发布版本的二进制安装程序可在Python软件包索引和Conda-Forge上获得Conda。
# conda
conda install dtale -c conda-forge
# if you want to also use "Export to PNG" for charts
conda install -c plotly python-kaleido
# or PyPI
pip install dtale 入门
| Pycharm | Jupyter |
|---|---|
Python终端
这是由Pycharm提供的
Windows防火墙的问题
如果您遇到在Windows上浏览器中查看D-Tale的问题,请尝试在防火墙配置中以“允许应用程序”的方式公开Python。这是一篇不错的文章:如何允许应用程序通过Windows防火墙进行通信
以编程方式可用的其他功能
import dtale
import pandas as pd
df = pd . DataFrame ([ dict ( a = 1 , b = 2 , c = 3 )])
# Assigning a reference to a running D-Tale process.
d = dtale . show ( df )
# Accessing data associated with D-Tale process.
tmp = d . data . copy ()
tmp [ 'd' ] = 4
# Altering data associated with D-Tale process
# FYI: this will clear any front-end settings you have at the time for this process (filter, sorts, formatting)
d . data = tmp
# Get raw dataframe w/ any sorting or edits made through the UI
d . data
# Get raw dataframe similar to '.data' along with any filters applied using the UI
d . view_data
# Shutting down D-Tale process
d . kill ()
# Using Python's `webbrowser` package it will try and open your server's default browser to this process.
d . open_browser ()
# There is also some helpful metadata about the process.
d . _data_id # The process's data identifier.
d . _url # The url to access the process.
d2 = dtale . get_instance ( d . _data_id ) # Returns a new reference to the instance running at that data_id.
dtale . instances () # Prints a list of all ids & urls of running D-Tale sessions.
重复数据检查
为了防止用户多次加载相同数据到D-Tale的用户,从而吞噬了宝贵的记忆,我们对重复输入数据进行了宽松的检查。支票运行以下内容:
- 行和列计数是否与先前加载的数据相同?
- 列的名称和顺序是否与先前加载的数据相同?
如果这两个条件都是正确的,则将向您呈现错误以及指向先前加载的数据的链接。这是互动外观的示例:
作为脚本
D-Tale可以通过在您的dtale .show命令中添加subprocess = false作为脚本运行。这是一个示例脚本:
import dtale
import pandas as pd
if __name__ == '__main__' :
dtale . show ( pd . DataFrame ([ 1 , 2 , 3 , 4 , 5 ]), subprocess = False )
Jupyter笔记本
在任何jupyter(ipython)内部执行这样的单元格中,将在输出单元格中显示d-tale的小实例。这里有一些例子:
| dtale .show | 任务 | 实例 |
|---|---|---|
如果您正在运行ipython <= 5.0,则还可以在显示的最新实例中调整输出单元的大小:
值得注意的一件事是,您在标准浏览器版本中看到的许多模态弹出窗口现在都将打开单独的浏览器窗口以进行空间相关:
| 列菜单 | 相关性 | 描述 | 列分析 | 实例 |
|---|---|---|---|---|
w/ jupyter服务器代理
JupyterHub具有一个扩展名,允许使用用户代理端口,JupyterHub Server代理
对我来说,这个扩展似乎是在Kubernetes中运行D-Tale的最佳解决方案。这是使用它的方法:
import pandas as pd
import dtale
import dtale . app as dtale _app
dtale _app . JUPYTER_SERVER_PROXY = True
dtale . show ( pd . DataFrame ([ 1 , 2 , 3 ]))
请注意,命令dtale _app.jupyter_server_proxy = true这将确保将与Jupyter Server Proxy Application root Prefix一起使用任何D-Tale实例:
/user/{jupyter用户名}/proxy/{ dtale实例port}/
要注意的一件事是,如果您尝试在笔记本中查看d-tale实例的_main_url,它将不包括主机名或端口:
import pandas as pd
import dtale
import dtale . app as dtale _app
dtale _app . JUPYTER_SERVER_PROXY = True
d = dtale . show ( pd . DataFrame ([ 1 , 2 , 3 ]))
d . _main_url # /user/johndoe/proxy/40000/ dtale /main/1
这是因为很难漫长地找出笔记本上运行的主机/端口。因此,如果您想查看_main_url,请务必将其序列:
http [s]:// [jupyterhub主机]:[jupyterhub端口]
如果出于某种原因,JupyterHub更改其API,以使应用程序root更改您也可以通过将app_root参数用于show()函数:
import pandas as pd
import dtale
import dtale . app as dtale _app
dtale . show ( pd . DataFrame ([ 1 , 2 , 3 ]), app_root = ' / user / johndoe / proxy / 40000 / ` )
使用此参数仅将应用程序根应用于该特定实例,因此您必须将其包含在每个呼叫show()中。
jupyterhub w/ kubernetes
请阅读这篇文章
Docker容器
如果您在Docker容器中安装了D-Tale,请在Docker Run命令中添加以下参数。
在Mac上:
docker run -h ` hostname ` -p 40000:40000- - h这将允许主机名(而不是docker容器的PID)在构建d-tale URL时可用
- -p访问端口40000,这是运行D-Tale的默认端口
在Windows上:
docker run -p 40000:40000- -p访问端口40000,这是运行D-Tale的默认端口
- D-Tale URL将为http://127.**0.*0.1:40000/
其他一切:
docker run -h ` hostname ` --network host- - h这将允许主机名(而不是docker容器的PID)在构建d-tale URL时可用
- - 网络主机,这将允许运行D-Tale流程所需的尽可能多的端口
Google Colab
这是一个托管的笔记本网站,感谢Colab的内部功能Google.colab.output.eval_js和JS功能Google.colab.kernel.kernel.proexyport用户可以在其笔记本中运行D-Tale。
免责声明:在此服务中使用d-tale时,将use_colab设置为true很重要。这是一个示例:
import pandas as pd
import dtale
import dtale . app as dtale _app
dtale _app . USE_COLAB = True
dtale . show ( pd . DataFrame ([ 1 , 2 , 3 ]))
如果这对您不起作用,请尝试使用use_ngrok,这将在下一部分中描述。
Kaggle
这是另一个托管的笔记本网站,由于烧瓶_NGrok的工作,用户可以在笔记本中运行D-Tale。
免责声明:在此服务中使用d-tale时,您将use_ngrok设置为true是导入的。在运行此示例之前,请确保运行PIP安装烧瓶-ngrok。这是一个示例:
import pandas as pd
import dtale
import dtale . app as dtale _app
dtale _app . USE_NGROK = True
dtale . show ( pd . DataFrame ([ 1 , 2 , 3 ]))
这是每个视频教程:
| 服务 | 教程 | addtl注释 |
|---|---|---|
| Google Colab | ||
| Kaggle | 确保在笔记本的设置下将“ Internet”切换切换为“ On”,以便您可以从PIP中安装鸡蛋 |
重要的是要注意,使用NGrok将限制您每台连接20个连接,因此,如果您看到此错误:
等待一会儿,应该让您再次工作。我正在积极寻找与我为Google Colab所做的类似的更可持续的解决方案。
活页夹
我已经建立了一个存储库,其中显示了如何在粘合剂内运行D-Tale的示例。
重要的应付是:
- 您必须安装Jupyter-Server-Proxy
- 查看环境.yml文件以查看如何将其添加到您的环境中
- 查看后构建文件,以了解如何在启动时激活它
r网状
我能够使用网状启用R在R中运行D-Tale。这是一个示例:
library('reticulate')
dtale <- import(' dtale ')
df <- read.csv('https://vincentarelbundock.g*ith*u*b.io/Rdatasets/csv/boot/acme.csv')
dtale $show(df, subprocess=FALSE, open_browser=TRUE)
现在,这样做的问题是D-Tale并未作为子过程运行,因此它将阻止您的R控制台,并且您将丢失以下功能:
- 从R控制台操纵数据状态
- 将更多数据添加到D故事
Open_Browser =不需要True,如果您在计算机上没有安装默认的浏览器,则将无法使用。如果您不使用该参数,请简单地复制并粘贴在您选择的浏览器中打印到控制台的URL。
我将对为什么R似乎不喜欢使用Python子流程(不确定是否具有网状管理Python状态)并在此线程中发布任何发现。
这是一些有用的设置链接:
网状
安装Python软件包
没有数据的启动
现在可以在没有前面加载数据的情况下运行D-Tale。因此,只需致电dtale .show(),这将为您启动应用程序,当您去查看它时,您将提供一个屏幕,您可以在其中上传CSV或TSV文件以获取数据。
加载文件后,它将带您直接进入由您加载的文件中的数据组成的标准数据网格。这可能会使在像Kubernetes这样的容器管理系统中将其用作按需应用程序。您开始并按需停止这些,并向您提供一个新实例,以将任何CSV或TSV文件加载到!
命令行
基本CLI选项(运行dtale - 查看所有可用选项)
| 支柱 | 描述 |
|---|---|
| - 主持人 | 您要使用的主机的名称(由于socket.gethostname(),最可能不需要) |
| - 港口 | 您要分配给D-Tale实例的端口 |
| - 姓名 | 您可以分配给D-Tale实例的可选名称(这将显示在<title>&Instances弹出窗口中) |
| - 调试 | 为您的D-Tale实例打开烧瓶的“调试”模式 |
| - 不加 | 旗帜以关闭自动扑克次级进程(一个小时的不活动后杀死D-Tale实例),适用于长期展示 |
| - 开机浏览器 | 标志以自动打开服务器的默认浏览器到D-Tale实例 |
| - 力量 | 标志迫使d-tale尝试在您指定的端口上杀死任何预先存在的过程,以便它可以使用它 |
从ArcticDB (高性能,无服务器数据框数据库)加载数据(这需要安装arcticdb或dtale [arcticdb] )
dtale --arcticdb-uri lmdb:/// < path > --arcticdb-library jdoe.my_lib --arcticdb-symbol my_symbol如果您想将存储机制更改为ArcticDB,请添加-arcticdb-use_store标志
dtale --arcticdb-uri lmdb:/// < path > --arcticdb-library my_lib --arcticdb-symbol my_symbol --arcticdb-use_store从北极加载数据(PANDAS DataFrames的高性能数据存储)(这需要安装北极或dtale [Arctic] )
dtale --arctic-uri mongodb://localhost:27027 --arctic-library my_lib --arctic-symbol my_symbol --arctic-start 20130101 --arctic-end 20161231从CSV加载数据
dtale --csv-path /home/jdoe/my_csv.csv --csv-parse_dates date从Excel加载数据
dtale --excel-path /home/jdoe/my_csv.xlsx --excel-parse_dates date
dtale --excel-path /home/jdoe/my_csv.xls --excel-parse_dates date
从JSON加载数据
dtale --json-path /home/jdoe/my_json.json --json-parse_dates date或者
dtale --json-path http://*json-*e*ndpoint --json-parse_dates date从R数据集加载数据
dtale --r-path /home/jdoe/my_dataset.rda
从sqlite DB文件加载数据
dtale --sqlite-path /home/jdoe/test.sqlite3 --sqlite-table test_table自定义命令行加载程序
从自定义加载器加载数据
- 使用dtale _cli_loaders环境变量,为包含一些Python模块的位置指定路径
- 任何包含全局变量loader_key&loader_props的Python模块都将被选为自定义加载程序
- LOADER_KEY:将与加载程序关联的键。默认情况下,您将获得北极和CSV (如果使用其中之一是您的关键之一,它将覆盖这些)
- LOADER_PROPS:可供指定的单个道具。
- 例如,使用北极,我们有主机,库,符号,开始和结束。
- 如果您将此属性作为空列表留下,那么您的加载程序将被视为标志。例如,我们不使用所有北极属性,而是我们简单地指定 - arctic(这在北极的情况下都无法正常工作,因为这取决于所有这些属性)
- 您还需要指定一个具有以下签名def find_loader(kwargs)的函数,该函数返回返回dataframe或无的函数
- 这是自定义加载程序的示例:
from dtale . cli . clickutils import get_loader_options
'''
IMPORTANT!!! This global variable is required for building any customized CLI loader.
When find loaders on startup it will search for any modules containing the global variable LOADER_KEY.
'''
LOADER_KEY = 'testdata'
LOADER_PROPS = [ 'rows' , 'columns' ]
def test_data ( rows , columns ):
import pandas as pd
import numpy as np
import random
from past . utils import old_div
from pandas . tseries . offsets import Day
from dtale . utils import dict_merge
import string
now = pd . Timestamp ( pd . Timestamp ( 'now' ). date ())
dates = pd . date_range ( now - Day ( 364 ), now )
num_of_securities = max ( old_div ( rows , len ( dates )), 1 ) # always have at least one security
securities = [
dict ( security_id = 100000 + sec_id , int_val = random . randint ( 1 , 100000000000 ),
str_val = random . choice ( string . ascii_letters ) * 5 )
for sec_id in range ( num_of_securities )
]
data = pd . concat ([
pd . DataFrame ([ dict_merge ( dict ( date = date ), sd ) for sd in securities ])
for date in dates
], ignore_index = True )[[ 'date' , 'security_id' , 'int_val' , 'str_val' ]]
col_names = [ 'Col{}' . format ( c ) for c in range ( columns )]
return pd . concat ([ data , pd . DataFrame ( np . random . randn ( len ( data ), columns ), columns = col_names )], axis = 1 )
# IMPORTANT!!! This function is required for building any customized CLI loader.
def find_loader ( kwargs ):
test_data_opts = get_loader_options ( LOADER_KEY , LOADER_PROPS , kwargs )
if len ([ f for f in test_data_opts . values () if f ]):
def _testdata_loader ():
return test_data ( int ( test_data_opts . get ( 'rows' , 1000500 )), int ( test_data_opts . get ( 'columns' , 96 )))
return _testdata_loader
return None
在此示例中,我们简单地基于命令行中指定的维度来构建一个带有一些虚拟数据的数据框:
- - 测台data行
- - 测塔塔柱
您将如何使用此加载程序:
dtale _CLI_LOADERS=./path_to_loaders bash -c ' dtale --testdata-rows 10 --testdata-columns 5 '
验证
您可以选择通过将以下内容添加到您的d-tale .Ini文件(在此处说明)来选择可选身份验证:
[auth]
active = True
username = johndoe
password = 1337h4xOr或者您可以致电以下内容:
import dtale . global_state as global_state
global_state . set_auth_settings ({ 'active' : True , 'username' : 'johndoe' , 'password' : '1337h4x0r' })
如果您在最初启动d-tale之前已经这样做,则将应用身份验证。如果您在开始D-Tale后添加此内容,则必须杀死您的服务并重新开始。
打开您的D-Tale会话时,您将提供这样的屏幕:
从那里,您可以输入您在.ini文件中设置的凭据或在dtale .global_state.set_auth_settings的呼叫中,您将被带到正常网格中。现在,您将在主菜单中有一个其他选项可以注销:
实例设置
用户可以在dtale函数中以编程方式在其实例中以编程方式设置前端属性,也可以通过在其实例上调用update_settings函数来设置前端属性。例如:
import dtale
import pandas as pd
df = pd . DataFrame ( dict (
a = [ 1 , 2 , 3 , 4 , 5 ],
b = [ 6 , 7 , 8 , 9 , 10 ],
c = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
))
dtale . show (
df ,
locked = [ 'c' ],
column_formats = { 'a' : { 'fmt' : '0.0000' }},
nan_display = '...' ,
background_mode = 'heatmap-col' ,
sort = [( 'a' , 'DESC' )],
vertical_headers = True ,
)
或者
import dtale
import pandas as pd
df = pd . DataFrame ( dict (
a = [ 1 , 2 , 3 , 4 , 5 ],
b = [ 6 , 7 , 8 , 9 , 10 ],
c = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
))
d = dtale . show (
df
)
d . update_settings (
locked = [ 'c' ],
column_formats = { 'a' : { 'fmt' : '0.0000' }},
nan_display = '...' ,
background_mode = 'heatmap-col' ,
sort = [( 'a' , 'DESC' )],
vertical_headers = True ,
)
d
这是可用的每个实例设置的简短描述:
show_columns
您想要在网格中显示的列名列表。其他任何东西都会被隐藏。
hide_columns
您最初希望从网格显示中隐藏的列名列表。
column_formats
列名称键的字典及其前端显示配置。以下是不同格式配置的示例:
- 数字:{'fmt':'0.00000'}
- 细绳:
- {'fmt':{'truncate':10}}截断字符串值不超过10个字符,然后是椭圆
- {'fmt':{'link':true}}如果您的字符串是URL将它们转换为可单击的链接
- {'fmt':{'html':true}}如果您的字符串是HTML片段,则将其呈现为HTML
- 日期:{'fmt':'嗯
nan_display
将数据框中的所有NAN值发送到浏览器时,将其转换为此(实际上并没有更改数据框的状态)
种类
对数据框进行排序(例如:[('a','asc'),('b','desc'))的元组列表))
锁定
在向左滚动时,将锁定在网格右侧的列名列表。
background_mode
一个字符串,表示D-Tale中可用的众多背景显示之一。选项是:
- Heatmap-All:打开所有数字列的热图,其中颜色由所有数字列的值范围确定
- Heatmap-Col:打开所有数字列的热图,其中颜色由列中的值范围确定
- 热图表 - [列名]:打开特定列的热图突出显示
- dtypes:基于数据类型的突出显示列
- 缺少:突出显示所有缺失的值(np.nan,空字符串,所有空间的字符串)
- 离群值:突出显示任何异常值
- 范围:突出显示在“ range_highlights”选项中输入的任何匹配器的值
- 低变量:突出显示差异较低的值
range_highlights
列名称键和范围配置的字典,如果存在该列的值,则将其遮蔽该颜色。这是一个示例输入:
'a': {
'active': True,
'equals': {'active': True, 'value': 3, 'color': {'r': 255, 'g': 245, 'b': 157, 'a': 1}}, # light yellow
'greaterThan': {'active': True, 'value': 3, 'color': {'r': 80, 'g': 227, 'b': 194, 'a': 1}}, # mint green
'lessThan': {'active': True, 'value': 3, 'color': {'r': 245, 'g': 166, 'b': 35, 'a': 1}}, # orange
}
Vertical_headers
如果设置为true,则网格中的标头将垂直旋转90度以节省宽度。
预定义过滤器
用户可以使用以下代码段来构建自己的自定义过滤器,可以从前端使用:
import pandas as pd
import dtale
import dtale . predefined_filters as predefined_filters
import dtale . global_state as global_state
global_state . set_app_settings ( dict ( open_predefined_filters_on_startup = True ))
predefined_filters . set_filters ([
{
"name" : "A and B > 2" ,
"column" : "A" ,
"description" : "Filter A with B greater than 2" ,
"handler" : lambda df , val : df [( df [ "A" ] == val ) & ( df [ "B" ] > 2 )],
"input_type" : "input" ,
"default" : 1 ,
"active" : False ,
},
{
"name" : "A and (B % 2) == 0" ,
"column" : "A" ,
"description" : "Filter A with B mod 2 equals zero (is even)" ,
"handler" : lambda df , val : df [( df [ "A" ] == val ) & ( df [ "B" ] % 2 == 0 )],
"input_type" : "select" ,
"default" : 1 ,
"active" : False ,
},
{
"name" : "A in values and (B % 2) == 0" ,
"column" : "A" ,
"description" : "A is within a group of values and B mod 2 equals zero (is even)" ,
"handler" : lambda df , val : df [ df [ "A" ]. isin ( val ) & ( df [ "B" ] % 2 == 0 )],
"input_type" : "multiselect" ,
"default" : [ 1 ],
"active" : True ,
}
])
df = pd . DataFrame (
([[ 1 , 2 , 3 , 4 , 5 , 6 ], [ 7 , 8 , 9 , 10 , 11 , 12 ], [ 13 , 14 , 15 , 16 , 17 , 18 ]]),
columns = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ]
)
dtale . show ( df )
该代码说明了前端可以拥有的输入类型:
- 输入:只是一个简单的文本输入框,用户可以输入所需的任何值(如果“列”的值是int或float,它将尝试将字符串转换为该数据类型),并且将传递给处理程序
- 选择:这将创建一个列出的下拉列表,该下拉列表填充了“列”的唯一值(如果列有大量唯一值,则异步下拉列表)
- 多选择:与“选择”相同,但它可以选择多个值(如果要在过滤器中执行ISIN操作,请提供方便)
这是功能的演示:
如果您希望有任何新类型的输入类型,请随时在存储库的“问题”页面上提交请求。
使用Swifter
Swifter是一个软件包,它将在PANDAS系列或DataFrame上提高任何Apply()功能的性能。如果在虚拟环境中安装软件包
pip install swifter
# or
pip install dtale [swifter]
它将用于以下操作:
- 主网格和图表显示中的标准数据帧格式
- 列构建器
- 类型转换
- 弦六角 - > int或float
- int或float->十六进制
- 混合 - >布尔
- int->时间戳
- 日期 - > int
- 相似性距离计算
- 类型转换
- 计算缺失计数时处理空字符串
- 通过“描述”弹出的数据类型构建唯一值
宽数据框的行为
加载“宽数据框”(带许多列的数据框)时,前端的性能瓶颈当前有一个性能瓶颈。当前解决此问题的解决方案是,在这些数据范围的初始负载到d-tale时,索引大于100(从左到右)的任何列将隐藏在前端。您仍然可以像其他任何方式一样解开这些列的方式,并且仍然可以选择使用“描述”弹出窗口显示所有列。这是这种行为的示例:
假设您将此数据框加载到D-Tale中。
import pandas as pd
import dtale
dtale . show ( pd . DataFrame (
{ 'col{}' . format ( i ): list
下载源码
通过命令行克隆项目:
git clone https://github.com/man-group/dtale.git