熊猫在样式中删除行应用功能
Posted
技术标签:
【中文标题】熊猫在样式中删除行应用功能【英文标题】:Pandas drop rows within styles apply function 【发布时间】:2021-06-09 05:41:38 【问题描述】:我使用 style.apply 函数在打印到 excel 之前突出显示数据框的某些单元格,并希望删除没有突出显示任何单元格的行。
import pandas as pd
import numpy as np
def highlight_difference(x):
m1 = x['Value_L'] != x['Lim_Low']
m2 = x['Value_H'] != x['Lim_High']
df1 = pd.DataFrame('', index=x.index, columns=x.columns)
df1['Value_L'] = np.where(m1, 'background-color: #E55451', df1['Value_L'])
df1['Value_H'] = np.where(m2, 'background-color: #E55451', df1['Value_H'])
drop_mask = m1 | m2
df1 = df1[drop_mask]
return df1
df.style.apply(highlight_difference, axis=None).to_excel('Result.xlsx')
这将导致以下错误:
ValueError:
解决这个问题的合理方法是什么?有没有办法在 apply 函数中删除行?
【问题讨论】:
【参考方案1】:您需要删除之前的值:
m1 = df['Value_L'] != df['Lim_Low']
m2 = df['Value_H'] != df['Lim_High']
drop_mask = m1 | m2
df[drop_mask].style.apply(highlight_difference, axis=None).to_excel('Result.xlsx')
也可以通过这个技巧传递样式的DataFrame:
df = pd.DataFrame('Value_L':[1,2,3],
'Lim_Low':[1,2,3],
'Value_H':[1,2,2],
'Lim_High':[0,2,3])
m1 = df['Value_L'] != df['Lim_Low']
m2 = df['Value_H'] != df['Lim_High']
drop_mask = m1 | m2
df11 = df[drop_mask]
df1 = pd.DataFrame('', index=df11.index, columns=df11.columns)
df1['Value_L'] = np.where(m1[drop_mask], 'background-color: #E55451', '')
df1['Value_H'] = np.where(m2[drop_mask], 'background-color: #E55451', '')
print (df1)
df11.style.apply(lambda x: df1, axis=None).to_excel('Result.xlsx')
【讨论】:
以上是关于熊猫在样式中删除行应用功能的主要内容,如果未能解决你的问题,请参考以下文章