熊猫日期时间索引的自定义显示格式?
问题描述:
我想显示 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
用于显示,但我发现非常可怕。使用造型功能会更好。
答
我会受到诱惑而只需要添加一个新列:
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
答
我只能用串补格式
...
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。我想避免这种情况,并有一个只显示的方法。另外,取决于格式,修改后的索引可能是非单调的,这可能会对其他操作造成麻烦。 –
我不认为这是一个自定义格式显示选项(如浮点数) –
好吧,当然(甚至更简单的是['dow'] = s.index.strftime('%a')'),但是任何移位操作都会混淆heck out任何人在看结果... –