在IPython笔记本中使用它时,有没有办法在Pandas DataFrame中添加格式化列?我想添加一个数据网址<img>
并将其显示在单元格中。
答案 0 :(得分:3)
如果您的src
网址过长,大熊猫会在显示它时将其截断。您需要增加最大列宽以适应它。
跟踪当前的最大列宽
current_max_colwidth = pd.get_option('display.max_colwidth')
print(current_max_colwidth)
50
将选项设置为大
pd.set_option('display.max_colwidth', 1000)
导入HTML
显示功能
from IPython.display import HTML
将数据框to_html
与参数escape=False
HTML(
pd.DataFrame([
"""<img src="http://stackoverflow.com/users/flair/2336654.png?theme=default">""",
"""<img src="http://stackoverflow.com/users/flair/2543372.png?theme=default">""",
"""<img src="http://stackoverflow.com/users/flair/44330.png?theme=default">"""
]).to_html(escape=False))
重新设置选项
pd.set_option('display.max_colwidth', current_max_colwidth)
将其整理成一个整洁的功能
def my_to_html(df):
current_max_colwidth = pd.get_option('display.max_colwidth')
pd.set_option('display.max_colwidth', 1000)
from IPython.display import HTML
my_html = HTML(df.to_html(escape=False))
pd.set_option('display.max_colwidth', current_max_colwidth)
return my_html
df = pd.DataFrame([
"""<img src="http://stackoverflow.com/users/flair/2336654.png?theme=default">""",
"""<img src="http://stackoverflow.com/users/flair/2543372.png?theme=default">""",
"""<img src="http://stackoverflow.com/users/flair/44330.png?theme=default">"""
])
my_to_html(df)
答案 1 :(得分:1)
以下是一个例子:
from IPython.display import HTML
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
# this file is in the same folder as the notebook I'm using on my drive
df['image'] = 'so-logo.png'
df['new'] = df['image'].apply(lambda x: '<img src="{}"/>'.format(x) if x else '')
HTML(df.to_html(escape=False))
或者,您可以使用df.style
代替IPython.display.HTML
。这也允许您添加其他格式,例如突出显示悬停时的行:
from IPython.display import HTML
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df['image'] = 'so-logo.png'
df['new'] = df['image'].apply(lambda x: '<img src="{}"/>'.format(x) if x else '')
def hover(hover_color="#ffff99"):
return dict(selector="tr:hover",
props=[("background-color", "%s" % hover_color)])
styles = [
hover(),
dict(selector="th", props=[("font-size", "150%"),
("text-align", "center")]),
dict(selector="caption", props=[("caption-side", "bottom")])
]
html = (df.style.set_table_styles(styles)
.set_caption("Hover to highlight."))
html
我把光标放在第二行: