python pandas фрейм данных с применением нескольких стилей html одновременно - PullRequest
2 голосов
/ 29 января 2020

У меня есть фрейм данных:

import pandas as pd
import numpy as np
import random

rows=3
df = pd.DataFrame(
    {'dtime': pd.date_range('2020-01-01', periods=rows, freq='15T'), 
     'Customer' : np.random.choice(['A', 'B', 'C'], size=rows),
     'Amount': [random.randint(1, 1000000) for x in range(3)]
    })
df

enter image description here

Я хотел бы экспортировать фрейм данных в html, но столбец Сумма должен быть с тысячами ("," not ".") разделитель и выравнивание по правому краю. Этот html должен быть без стилей css, потому что я отправлю его как тело в html электронном письме.

Если я выполню df.to_html(), я получу:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>dtime</th>
      <th>Customer</th>
      <th>Amount</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>2020-01-01 00:00:00</td>
      <td>C</td>
      <td>302422</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2020-01-01 00:15:00</td>
      <td>A</td>
      <td>9933</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2020-01-01 00:30:00</td>
      <td>C</td>
      <td>843669</td>
    </tr>
  </tbody>
</table>

enter image description here

, что близко, но мне нужно выровнять вправо и разделитель тысяч. Для этого я попытался

df.to_html(formatters = {'Amount': lambda x: f'{x:,}'})

, что привело к некоторому улучшению:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>dtime</th>
      <th>Customer</th>
      <th>Amount</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>2020-01-01 00:00:00</td>
      <td>C</td>
      <td>302,422</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2020-01-01 00:15:00</td>
      <td>A</td>
      <td>9,933</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2020-01-01 00:30:00</td>
      <td>C</td>
      <td>843,669</td>
    </tr>
  </tbody>
</table>

enter image description here

Мне все еще нужно выравнивание по правому краю, которое я не могу получить с помощью df.to_html(). Как я вижу, оба требования можно выполнить с помощью

df.style.format({'Amount':'{:,}'}).set_properties(subset='Amount', **{'text-align': 'right'}).render()

Но в этом случае у меня нет границы таблицы.

enter image description here

Как получить границу и для столбца Количество и разделитель тысяч одновременно выровнять по правому краю, используя только теги html?

Мне нужен способ поставить border="1" class="dataframe" в тег <table> .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...