【问题标题】:How to stop Pandas adding time to column title after transposing a datetime index?如何在转置日期时间索引后阻止 Pandas 向列标题添加时间?
【发布时间】:2015-07-20 23:43:39
【问题描述】:

我有一个 Pandas 数据框如下:

In [10]: libor_table
Out[10]:
           Euribor interest rate - 3 months Euribor interest rate - 6 months  \
2015-07-17                          -0.019%                           0.049%
2015-07-16                          -0.019%                           0.049%
2015-07-15                          -0.019%                           0.049%
2015-07-14                          -0.019%                           0.049%
2015-07-13                          -0.019%                           0.049%

           GBP LIBOR - 3 months GBP LIBOR - 6 months USD LIBOR - 3 months  \
2015-07-17             0.58375%             0.75406%             0.29175%
2015-07-16             0.58438%             0.75313%             0.28700%
2015-07-15             0.58406%             0.75063%             0.28850%
2015-07-14             0.58219%             0.74250%             0.28850%
2015-07-13             0.58188%             0.73750%             0.28880%

           USD LIBOR - 6 months
2015-07-17             0.46020%
2015-07-16             0.45570%
2015-07-15             0.46195%
2015-07-14             0.46345%
2015-07-13             0.46340%

索引在日期时间:

In [11]: libor_table.index
Out[11]:
DatetimeIndex(['2015-07-17', '2015-07-16', '2015-07-15', '2015-07-14',
               '2015-07-13'],
              dtype='datetime64[ns]', freq=None, tz=None)

我的问题是当我使用to_html() 将表格制作成 HTML 表格时。标准数据框可以很好地转换为 HTML 表格:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Euribor interest rate - 3 months</th>
      <th>Euribor interest rate - 6 months</th>
      <th>GBP LIBOR - 3 months</th>
      <th>GBP LIBOR - 6 months</th>
      <th>USD LIBOR - 3 months</th>
      <th>USD LIBOR - 6 months</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>2015-07-17</th>
      <td>-0.019%</td>
      <td>0.049%</td>
      <td>0.58375%</td>
      <td>0.75406%</td>
      <td>0.29175%</td>
      <td>0.46020%</td>
    </tr>
    <tr>
      <th>2015-07-16</th>
      <td>-0.019%</td>
      <td>0.049%</td>
      <td>0.58438%</td>
      <td>0.75313%</td>
      <td>0.28700%</td>
      <td>0.45570%</td>
    </tr>
    <tr>
      <th>2015-07-15</th>
      <td>-0.019%</td>
      <td>0.049%</td>
      <td>0.58406%</td>
      <td>0.75063%</td>
      <td>0.28850%</td>
      <td>0.46195%</td>
    </tr>
    <tr>
      <th>2015-07-14</th>
      <td>-0.019%</td>
      <td>0.049%</td>
      <td>0.58219%</td>
      <td>0.74250%</td>
      <td>0.28850%</td>
      <td>0.46345%</td>
    </tr>
    <tr>
      <th>2015-07-13</th>
      <td>-0.019%</td>
      <td>0.049%</td>
      <td>0.58188%</td>
      <td>0.73750%</td>
      <td>0.28880%</td>
      <td>0.46340%</td>
    </tr>
  </tbody>
</table>

但是我想转置 HTML 输出的数据框 - libor_table.transpose().to_html(),当我这样做时,pandas 会将时间添加到列标题,如下所示:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>2015-07-17 00:00:00</th>
      <th>2015-07-16 00:00:00</th>
      <th>2015-07-15 00:00:00</th>
      <th>2015-07-14 00:00:00</th>
      <th>2015-07-13 00:00:00</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Euribor interest rate - 3 months</th>
      <td>-0.019%</td>
      <td>-0.019%</td>
      <td>-0.019%</td>
      <td>-0.019%</td>
      <td>-0.019%</td>
    </tr>
    <tr>
      <th>Euribor interest rate - 6 months</th>
      <td>0.049%</td>
      <td>0.049%</td>
      <td>0.049%</td>
      <td>0.049%</td>
      <td>0.049%</td>
    </tr>
    <tr>
      <th>GBP LIBOR - 3 months</th>
      <td>0.58375%</td>
      <td>0.58438%</td>
      <td>0.58406%</td>
      <td>0.58219%</td>
      <td>0.58188%</td>
    </tr>
    <tr>
      <th>GBP LIBOR - 6 months</th>
      <td>0.75406%</td>
      <td>0.75313%</td>
      <td>0.75063%</td>
      <td>0.74250%</td>
      <td>0.73750%</td>
    </tr>
    <tr>
      <th>USD LIBOR - 3 months</th>
      <td>0.29175%</td>
      <td>0.28700%</td>
      <td>0.28850%</td>
      <td>0.28850%</td>
      <td>0.28880%</td>
    </tr>
    <tr>
      <th>USD LIBOR - 6 months</th>
      <td>0.46020%</td>
      <td>0.45570%</td>
      <td>0.46195%</td>
      <td>0.46345%</td>
      <td>0.46340%</td>
    </tr>
  </tbody>
</table>

Pandas 为什么这样做,有没有办法阻止它?

编辑:此错误已提交here

【问题讨论】:

  • 不知道为什么会这样,但以下对我来说是一种解决方法:libor_table.index = libor_table.index.date libor_table.T.to_html() 值得作为问题发布:github.com/pydata/pandas/issues
  • 成功了,谢谢。我以前从未在 github 上发布过问题 - 多么令人兴奋。
  • 如果您确实发布了问题,您能否编辑您的问题并附上问题的链接,谢谢
  • 我在这里发布了这个问题 - github.com/pydata/pandas/issues/10640 - 如果我需要更改任何内容,请告诉我,我以前从未这样做过。
  • 对我来说看起来不错,您应该很快就会得到回复,我发现熊猫开发人员的回复非常快

标签: python pandas


【解决方案1】:

这对我来说似乎是一个错误,我可以使用一个小例子来重现它:

In [120]:
# generate some dummy data
t="""time,value
2015-07-17,0
2015-07-18,1"""
df = pd.read_csv(io.StringIO(t), parse_dates=True, index_col=[0])
df

Out[120]:
            value
time             
2015-07-17      0
2015-07-18      1

调用to_html 可以正常工作:

In [121]:   
df.to_html()

Out[121]:
'<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>value</th>\n    </tr>\n    <tr>\n      <th>time</th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>2015-07-17</th>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2015-07-18</th>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>'

要解决转置格式问题,您可以将 datetimeindex 显式设置为 date

In [122]:
df.index = df.index.date
df.T.to_html()

Out[122]:
'<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>2015-07-17</th>\n      <th>2015-07-18</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>value</th>\n      <td>0</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>'

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2017-04-24
    • 2020-01-16
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多