大熊猫DatetimeIndex的自定义显示格式?

时间:2017-11-03 22:51:47

标签: python pandas

我想使用索引的自定义格式显示 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以显示,但我觉得非常糟糕。使用样式功能会更好。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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