2017-11-03 4 views
1

Ich möchte Anzeige eine DataFrame mit einem benutzerdefinierten Format für den Index.Benutzerdefiniertes Anzeigeformat für Pandas DatetimeIndex?

Ich weiß, wie man eine DatetimeIndex in Zeichenfolge mit einigen Format konvertieren, und ich bin mir auch der schönen styling in 0.17.1 eingeführt bekannt. Der Formatierungsmechanismus scheint jedoch keine Möglichkeit zu bieten, den Index selbst zu formatieren (oder habe ich etwas übersehen?).

Hier ist ein einfaches Beispiel

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'] 

Ich mag wäre in der Lage sein df anzuzeigen, wie:

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

:

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

Ein unelegant Weg natürlich zu tun ist, und wenn gewünscht, konvertieren Sie die df zum Zwecke der Anzeige, aber ich finde das ziemlich furchtbar. Es wäre so viel schöner, die Styling-Fähigkeit zu nutzen.

Antwort

0

würde ich versucht sein, einfach eine neue Spalte hinzufügen:

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

Ich glaube nicht, dass es ein benutzerdefiniertes Format Anzeige-Option (wie es für Schwimmer ist) –

+1

gut, sicher (und noch einfacher ist 's ['dow'] = s.index.strftime ('% a')'), aber dann wird jede Schicht Operation die Hölle durcheinander bringen von jedem, der das Ergebnis betrachtet ... –

0

ich nur String bilden das Format verwenden, können ...

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

das Problem ist, dass der DataFrame verändert. Ich möchte das vermeiden und habe nur eine Anzeige-Methode. Je nach Format kann der modifizierte Index auch nicht-monoton sein, was bei anderen Operationen zu Problemen führen kann. –

Verwandte Themen