如何为空行着色并使用 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)
我正在尝试在 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)