1
votes

Mise en forme des couleurs Ligne de fichier Excel en Python

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. entrez la description de l'image ici

Veuillez me guider comment puis-je faire cela en python. Merci d'avance.


0 commentaires

3 Réponses :


1
votes

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))

pic


3 commentaires

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?



1
votes

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:

 entrez la description de l'image ici

p>


0 commentaires

1
votes

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)


3 commentaires

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)