2017-01-16 546 views
-4

我有这个Python字典作为输出。如何将Python字典转换为html表格?

{'Job1': {'2017-01-10': [44, 33, 11, 75, 22]}, 
'Job 2': {'2017-01-05': [25, 25, 0, 100, 25], '2017-01-10': [50, 50, 0, 100, 25]}, 
'Job 3': {'2017-01-03': [44, 22, 22, 50, 22], '2017-01-04': [66, 36, 30, 54, 22], '2017-01-06': [88, 52, 36, 59, 22], '2017-01-10': [132, 68, 64, 51, 22], '2017-01-02': [22, 9, 13, 40, 22], '2017-01-08': [110, 52, 58, 47, 22]}, 
'Job4': {'2017-01-10': [25, 25, 0, 100, 25]}} 

其中date是动态列表就像 ,我有静态作业列表。

我怎么能改变这个字典像下面的图片。 PS-从日期字典中捕获的第一个元素。

1/2/2017 1/3/2017 1/4/2017 1/5/2017 1/6/2017 1/7/2017 1/8/2017 1/9/2017 1/10/2017 
Job 1                        44 
Job 2         25               50 
Job 3 22   44   66   88   110  132 
Job 4                         25 

回答

1

你可以用大熊猫做它像这样:

import pandas as pd 

a = {'Job1': {'2017-01-10': [44, 33, 11, 75, 22]}, 
'Job2': {'2017-01-05': [25, 25, 0, 100, 25], '2017-01-10': [50, 50, 0, 100, 25]}, 
'Job3': {'2017-01-03': [44, 22, 22, 50, 22], '2017-01-04': [66, 36, 30, 54, 22], '2017-01-06': [88, 52, 36, 59, 22], '2017-01-10': [132, 68, 64, 51, 22], '2017-01-02': [22, 9, 13, 40, 22], '2017-01-08': [110, 52, 58, 47, 22]}, 
'Job4': {'2017-01-10': [25, 25, 0, 100, 25]}} 
df = pd.DataFrame(data=a) 
df = df.fillna(' ').T 
df 

输出:

enter image description here

如果你只想列表的第一个元素:

df = df.applymap(lambda x: x[0] if type(x)==list else x) 
df 

enter image description here

如果你想将其转换成HTML表格,你可以使用.to_html()方法,像这样:

print df.to_html() 

输出:

<table border="1" class="dataframe"> 
    <thead> 
    <tr style="text-align: right;"> 
     <th></th> 
     <th>2017-01-02</th> 
     <th>2017-01-03</th> 
     <th>2017-01-04</th> 
     <th>2017-01-05</th> 
     <th>2017-01-06</th> 
     <th>2017-01-08</th> 
     <th>2017-01-10</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <th>Job1</th> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td>44</td> 
    </tr> 
    <tr> 
     <th>Job2</th> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td>25</td> 
     <td></td> 
     <td></td> 
     <td>50</td> 
    </tr> 
    <tr> 
     <th>Job3</th> 
     <td>22</td> 
     <td>44</td> 
     <td>66</td> 
     <td></td> 
     <td>88</td> 
     <td>110</td> 
     <td>132</td> 
    </tr> 
    <tr> 
     <th>Job4</th> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td>25</td> 
    </tr> 
    </tbody> 
</table>