python - 熊猫风格的循环无法正常工作
问题描述
我在 Pandas 中有一个数据框,其中包含行星名称和有关每个行星的信息。行星名称存储在标题为“行星”的列下。我想突出显示特定行星、地球、土星和火星的行。出于某种原因,当我运行此脚本并导出为 Excel 文件时,只有 highlight_planets 列表中的第一个行星被突出显示。在这种情况下,只有地球被突出显示(土星和火星没有被突出显示)。如果我将土星移动到第一个位置并将地球移动到第二个位置,则只有土星行会在数据框中突出显示。如何突出显示我的行星列包含地球、土星或火星的所有行?
谢谢。
def highlight_sentiment(row):
highlight_planets = ['Earth', 'Saturn', 'Mars']
for m in highlight_planets:
if row['planet'] == m:
return ['background-color: yellow'] * len(row)
else:
return ['background-color: white'] * len(row)
df.style.apply(highlight_sentiment, axis=1)
df = df.style.apply(highlight_sentiment, axis=1)
df.to_excel("df_test.xlsx", index = False)
解决方案
在您的for
循环中,return
如果行星不是您列表中的第一个值,您将立即。
将最后一条return
语句移到循环之外,这样如果行星与列表中的任何值for
都不匹配,它只会返回白色背景。
def highlight_sentiment(row):
highlight_planets = ['Earth', 'Saturn', 'Mars']
for m in highlight_planets:
if row['planet'] == m:
return ['background-color: yellow'] * len(row)
return ['background-color: white'] * len(row)
顺便说一句,您可以for
完全避免循环,只需使用in
:
def highlight_sentiment(row):
highlight_planets = ['Earth', 'Saturn', 'Mars']
if row['planet'] in highlight_planets:
return ['background-color: yellow'] * len(row)
return ['background-color: white'] * len(row)
推荐阅读
- javascript - Node JS 应用程序与 MongoDB 的 express api 同时运行
- javascript - 删除固定列DataTables下的水平滚动条
- c++ - boost::transform_iterator 和 std::iter_swap
- ansible - 在 Jinja2 / Ansible 中计算所需的空间
- sql - 带有连接但有效列的标识符无效
- angular - 运行 Angular 2 项目时出现许多 TS2X 错误
- node.js - collection.findOne 总是最后执行
- python-3.7 - 我怎样才能简化这个 Python,有没有更简单的方法来做到这一点?
- java - Object.toString() 显示错误的类?
- android - 检测是否在具有异构 CPU 架构的设备上运行