如何为空行着色并使用 pandas 导出到 excel 文件?

How can I color the empty rows in and export to an excel file with pandas?

我正在尝试在 excel 上自动执行一些任务,其中一些包括设置没有任何红色值的单元格(我的 DataFrame 维度中的空单元格,而不是它之外的空单元格),我在检查后尝试了以下操作之前的类似回答:

import pandas as pd

# Create a dataframe
df = pd.read_excel(r'input.xls', sheet_name='sheet1')
print(df)

df.style.applymap(lambda x: 'background-color : yellow' if x>1 else '')


# create excel writer object
writer = pd.ExcelWriter(r'Output.xls')

# write dataframe to excel
df.to_excel(writer)
# save the excel
writer.save()
print('DataFrame is written successfully to Excel File.')

我也试过其他方法,比如

def color(row):
    if row.isnull().values.any() == True:
        return ['background-color: red'] * len(row)
    return [''] * len(row)

# Apply the function
df.style.apply(color, axis=1)

None 其中似乎有效,在控制台中我得到了正确的打印值,并且我得到了一个输出文件,其中包含从 0 开始的附加行枚举,但输出中没有任何颜色 excel 文件

我在 excel 中的数据集有 x x y 维度,每个单元格可以包含数字(十进制)或文本,具体取决于列名

pandas Styler object is a separate object from the df which creates it. To write out a styled DataFrame to excel we need to use the actual Styler object not df. The easiest way to do this is to use Styler.to_excel:

# Save Styler Object for Later
styler = df.style
# Apply Styles (This can be chained or on separate lines)
styler.applymap(lambda x: 'background-color : yellow' if x > 1 else '')
styler.apply(color, axis=1)
# Export the styler to excel
styler.to_excel('Output.xls', index=False)

方法链接也有效:

df.style \
    .applymap(lambda x: 'background-color : yellow' if x > 1 else '') \
    .apply(color, axis=1) \
    .to_excel('Output.xls', index=False)

*注意:index=False确保DataFrame索引不包含在输出中。 (“从 0 开始的附加行枚举”)


我们也可以类似的方式使用pd.ExcelWriter with the Styler

# Save Styler Object for Later
styler = df.style
# Apply Styles (This can be chained or on separate lines)
styler.applymap(lambda x: 'background-color : yellow' if x > 1 else '')
styler.apply(color, axis=1)

with pd.ExcelWriter('Output.xls') as writer:
    styler.to_excel(writer, index=False)

作为一般改进,我们可以通过将 axis=None 传递给 Styler.apply 并在一个函数中执行所有修改来在 DataFrame 级别设置样式:

def color(df_):
    styles_df = pd.DataFrame('', index=df_.index, columns=df_.columns)
    # Color cells yellow where they are greater than 1
    styles_df[df_ > 1] = 'background-color: yellow'
    # Color rows red where there are any null values across rows
    styles_df.loc[df.isnull().any(axis=1), :] = 'background-color: red'
    return styles_df


with pd.ExcelWriter('Output.xls') as writer:
    df.style.apply(color, axis=None).to_excel(writer, index=False)