2016-04-27 12 views
7

the style guide for pandas'u takip ediyordum ve gayet iyi çalışıyordu.pandalar to_html?

Bu stiller, Outlook aracılığıyla to_html komutunu kullanarak nasıl saklayabilirim? Belgeler benim için eksik görünüyor.

(df.style 
    .format(percent) 
    .applymap(color_negative_red, subset=['col1', 'col2']) 
    .set_properties(**{'font-size': '9pt', 'font-family': 'Calibri'}) 
    .bar(subset=['col4', 'col5'], color='lightblue')) 

import win32com.client as win32 
outlook = win32.Dispatch('outlook.application') 
mail = outlook.CreateItem(0) 
mail.Subject = subject_name 
mail.HTMLbody = ('<html><body><p><body style="font-size:11pt; 
font-family:Calibri">Hello,</p> + '<p>Title of Data</p>' + df.to_html(
      index=False, classes=????????) '</body></html>') 
mail.send 

to_html belgeleri bir sınıflar ben to_html yönteminin içine koyabilirsiniz o komutu olduğunu gösteriyor, ama bunu çözemiyorum. Aynı zamanda benim dataframe'm yukarıda belirttiğim stili taşımamış gibi görünüyor.

df = (df.style 
     .format(percent) 
     .applymap(color_negative_red, subset=['col1', 'col2']) 
     .set_properties(**{'font-size': '9pt', 'font-family': 'Calibri'}) 
     .bar(subset=['col4', 'col5'], color='lightblue')) 

Sonra df artık Stil nesnesidir ve to_html kullanamazsınız:

ben deneyin.

Düzenleme - şu anda tablolarımı değiştirmek için şu anda yapıyorum. Bu çalışır, ancak pandaların sunduğu .style yönteminin harika özelliklerini koruyamam. Eğer zincirleme atamaları için style ekledikten sonra

email_paragraph = """ 
<body style= "font-size:11pt; font-family:Calibri; text-align:left; margin: 0px auto" > 
""" 

email_caption = """ 
<body style= "font-size:10pt; font-family:Century Gothic; text-align:center; margin: 0px auto" > 
""" 


email_style = '''<style type="text/css" media="screen" style="width:100%"> 
    table, th, td {border: 0px solid black; background-color: #eee; padding: 10px;} 
    th {background-color: #C6E2FF; color:black; font-family: Tahoma;font-size : 13; text-align: center;} 
    td {background-color: #fff; padding: 10px; font-family: Calibri; font-size : 12; text-align: center;} 
    </style>''' 
+0

Dün saatlerce şans denemedim. Veritabanını Outlook'ta nasıl özelleştireceğimi anlayamıyorum. Çirkin görünüyor (büyük yazı tipi). Bilgisayarımdaki dataframe güzel görünüyor .. metriğin hedefle buluşamadığı yerde vurgulanıyor, sesi göstermek için çubuk grafikler var. Görünüm e-postasını görüntülemek için bunu elde etmenin bir yolu yok mu? – trench

cevap

11

Bir Styler nesne üzerinde faaliyet gösteriyor. Bu nesne, html'yi bir dize olarak almak için render yöntemine sahiptir. sizin örnekte Yani, böyle bir şey yapabileceğini:

html = (
    df.style 
    .format(percent) 
    .applymap(color_negative_red, subset=['col1', 'col2']) 
    .set_properties(**{'font-size': '9pt', 'font-family': 'Calibri'}) 
    .bar(subset=['col4', 'col5'], color='lightblue') 
    .render() 
) 

Sonra e-posta yerine bir df.to_html() içinde html sayılabilir.

+0

Bu işe yaradı ve harika görünüyor, teşekkürler! – trench

+0

Aslında, çubuk grafiklerin Outlook e-postasında görünmediğini fark ettim. Her şey yolunda çalışıyor. Görüntülenecek herhangi bir fikir var mı? – trench

1

Bu, abartılı/pythonik bir çözüm değildir. To_html() yöntemiyle yapılan html kodundan önce bağlantıyı doğrudan css dosyasına ekledim, sonra tüm dizeyi bir html dosyası olarak kaydettim. Bu benim için iyi çalıştı.

dphtml = r'<link rel="stylesheet" type="text/css" media="screen" href="css-table.css" />' + '\n' 
dphtml += dp.to_html() 

with open('datatable.html','w') as f: 
    f.write(dphtml) 
    f.close() 
    pass