2017-11-03 125 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。我想避免这种情况,并有一个只显示的方法。另外,取决于格式,修改后的索引可能是非单调的,这可能会对其他操作造成麻烦。 –