J'ai un dataframe où j'ai 2 colonnes de date. Je dois les comparer et s'ils sont différents, la rangée entière doit être colorée. Veuillez vérifier l'image.
Veuillez me guider comment puis-je faire cela en python. Merci d'avance.
3 Réponses :
Créez des styles dans Helper DataFrame et export pour exceller :
df = pd.DataFrame({'Date1':['19/3/2011','15/5/2015','18/8/2018'], 'Date2':['19/3/2011','1/1/2019','18/8/2018']}) print (df) Date1 Date2 0 19/3/2011 19/3/2011 1 15/5/2015 1/1/2019 2 18/8/2018 18/8/2018 def highlight_diff(x): c1 = 'background-color: red' c2 = '' m = x['Date1'] != x['Date2'] df1 = pd.DataFrame(c2, index=x.index, columns=x.columns) df1.loc[m, :] = c1 return df1 (df.style .apply(highlight_diff,axis=None) .to_excel('styled.xlsx', engine='openpyxl', index=False))
est-il possible de ne colorer que la deuxième cellule de la colonne date 2?
@Abdullah - Bien sûr, remplacez df1.loc [m,:] = c1
par df1.loc [m, 'Date2'] = c1
@Abdullah - Accepter la réponse fonctionnant avec votre nouvelle exigence?
Vous devez utiliser DataFrame.style
et DataFrame. to_excel
:
import pandas as pd df = pd.DataFrame({'Date1':['19/3/2011','15/5/2015','18/8/2018'], 'Date2':['19/3/2011','1/1/2019','18/8/2018']}) df.style.apply(lambda x: ['background-color: red']*df.shape[1] if x['Date1'] != x['Date2'] else ['']*df.shape[1], axis=1).to_excel("output.xlsx", index=False)
et vous obtenez:
p>
un peu plus propre en utilisant une fonction
def format_df(x): if x.Date1 != x.Date2: return ['']+['background-color: red'] return [''] * len(x) df.style.apply(lambda x: format_df(x), axis=1)
Edit 1: si vous voulez que seule la deuxième colonne soit mise en évidence,
def format_df(x): if x.Date1 != x.Date2: return ['background-color: red'] * len(x) return [''] * len(x) df.style.apply(lambda x: format_df(x), axis=1).to_excel("file.xlsx",index=False)
est-il possible de colorer simplement la deuxième cellule de la deuxième colonne de date.
cela soulève une erreur de valeur: "ValueError: les tableaux doivent tous avoir la même longueur"
@Abdulla, combien de colonnes avez-vous, le deuxième code ne fonctionnera que pour deux
colonnes. Pour plusieurs colonnes: par exemple si votre Date2
est la quatrième colonne, alors return [''] * 3 + ['background-color: red'] + [''] * (len (x) -4)