2017-11-03 4 views
1

ディスプレイDataFrameインデックスのカスタムフォーマットを使用したいと思います。pandas DatetimeIndexのカスタム表示形式ですか?

私はDatetimeIndexを何らかのフォーマットで文字列に変換する方法を知っています。また、0.17.1で導入されたnice stylingも知っています。しかし、スタイリング・メカニズムは、索引自体をカスタム・フォーマットする方法を提供していないようです(または、私は何かが恋しくなりましたか?)。一つの無粋な方法は、実行するのは勿論である

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 

としてここ

は、簡単な例

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を表示できるようにしたいと思います必要に応じて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

's ['dow'] = s.index.strftime( '%a')')であることは間違いありませんが、シフト操作は混乱を招きます結果を見ている人は誰でも... –

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を変更することです。私はそれを避け、表示専用の方法を持っています。また、形式によっては、変更された索引が単調でなくても、他の操作に問題が生じる可能性があります。 –

関連する問題