2017-11-03 127 views
1

我想顯示 a DataFrame使用索引的自定義格式。熊貓日期時間索引的自定義顯示格式?

我知道如何使用某種格式將DatetimeIndex轉換爲字符串,並且我也知道在0.17.1中引入了漂亮的styling。然而,樣式機制似乎沒有提供自定義格式索引本身的方式(或者我錯過了什麼?)。

下面是一個簡單的例子

In[10]: 
df = pd.DataFrame(
    index=pd.DatetimeIndex(start='2017-01-01', freq='D', periods=3), 
    columns=['v'], 
    data=np.arange(3) 
) 
df 

Out[10]: 
      v 
2017-01-01 0 
2017-01-02 1 
2017-01-03 2 

In[11]: 
df.index.format(formatter=lambda t: f'{t:%Y-%m-%d %a}') 

Out[11]: 
['2017-01-01 Sun', '2017-01-02 Mon', '2017-01-03 Tue'] 

我想是能夠顯示df爲:

Out[10]: 
       v 
2017-01-01 Sun 0 
2017-01-02 Mon 1 
2017-01-03 Tue 2 

一個不雅的方式當然是要做到:

def dow_display(df): 
    df = df.copy() 
    df.index = df.index.format(formatter=lambda t: f'{t:%Y-%m-%d %a}') 
    return df 

並在需要時轉換df用於顯示,但我發現非常可怕。使用造型功能會更好。

回答

0

我會受到誘惑而只需要添加一個新列:

In [11]: df.index.weekday_name 
Out[11]: Index(['Sunday', 'Monday', 'Tuesday'], dtype='object') 

In [12]: df.index.weekday_name.str[:3] 
Out[12]: Index(['Sun', 'Mon', 'Tue'], dtype='object') 

In [13]: df["weekday"] = df.index.weekday_name.str[:3] 

In [14]: df 
Out[14]: 
      v weekday 
2017-01-01 0  Sun 
2017-01-02 1  Mon 
2017-01-03 2  Tue 
+0

我不認爲這是一個自定義格式顯示選項(如浮點數) –

+1

好吧,當然(甚至更簡單的是['dow'] = s.index.strftime('%a')'),但是任何移位操作都會混淆heck out任何人在看結果... –

0
我只能用串補格式

...

df.index=df.index.astype(str)+' '+df.index.weekday_name.str[:3] 
df 
Out[1108]: 
       v 
2017-01-01 Sun 0 
2017-01-02 Mon 1 
2017-01-03 Tue 2 
+0

問題是修改了DataFrame。我想避免這種情況,並有一個只顯示的方法。另外,取決於格式,修改後的索引可能是非單調的,這可能會對其他操作造成麻煩。 –