96736
  
  
データフレームdf_sumは以下となります。  
time flow  
2021/08/01 00:30 1627248  
2021/08/02 00:30 1629168  
2021/08/03 00:30 1629521  
2021/08/04 00:30 1629521  
2021/08/05 00:30 1629521

df_e=df_sum  
df_e.index= pd.to_datetime(df_e.index)  
df_e.index = df_e.index - timedelta(minutes=30)

以下を生成しました：  
time flow  
2021-08-01 1627248  
2021-08-02 1629168  
2021-08-03 1629521  
2021-08-04 1629521  
2021-08-05 1629521

時間のフォーマットは2021/08/01 0:00にしたい場合、  
どう修正したらいいですか？教えていただけると幸いです。


CC BY-SA 4.0
2023-11-10T08:29:22.640
96735
2023-11-11T03:37:51.660
56371
question
python pandas
pandasの時間引き算について、時間の表示の問題


※ `df_e.index` は `Timestamp` 型ではなく、`str` 型になります

[code]

    df_e = df_sum.copy()
    df_e.index = pd.to_datetime(df_e.index)
    df_e.index = df_e.index - timedelta(minutes=30)
    
    print(type(df_e.index[0]))
    df_e.index = df_e.index.strftime('%Y/%m/%d %-H:%M')
    print(df_e)
    print(type(df_e.index[0]))
    
    # <class 'pandas._libs.tslibs.timestamps.Timestamp'>
    #
    #                     flow
    # time                     
    # 2021/08/01 0:00  1627248
    # 2021/08/02 0:00  1629168
    # 2021/08/03 0:00  1629521
    # 2021/08/04 0:00  1629521
    # 2021/08/05 0:00  1629521
    #
    # <class 'str'>
    
[/code]


CC BY-SA 4.0
2023-11-10T09:29:00.547
96736
2023-11-10T18:58:52.147
2023-11-10T18:58:52.147
47127
47127
96735
answer


`style` (styler) を使う方法

pandasの普通の表示形式とは異なる形式での表示  
(データフレーム, インデックスなど内容は変化しない)

参考: [Table
Visualization](https://pandas.pydata.org/docs/user_guide/style.html)

[code]

    df_e.style
    #                       flow
    # time
    # 2021-08-01 00:00:00   1627248
    # 2021-08-02 00:00:00   1629168
    # 2021-08-03 00:00:00   1629521
    # 2021-08-04 00:00:00   1629521
    # 2021-08-05 00:00:00   1629521
    
[/code]

詳細な書式を指定するには, `format()` / `format_index()` を使用

[code]

    df_e.style.format_index(lambda dt: dt.strftime('%Y/%m/%d %H:%M'))
    
    #                   flow
    # time
    # 2021/08/01 00:00  1627248
    # 2021/08/02 00:00  1629168
    # 2021/08/03 00:00  1629521
    # 2021/08/04 00:00  1629521
    # 2021/08/05 00:00  1629521
    
[/code]

ただし, `0:00` のような時刻表示には `strftime` が対応していないようなので, 独自の書式指定が必要かもしれません  
(通常は, 0埋めした10進数で表記した時 (12 or 24時間表記) が利用される)

* * *

**追記**

`0:00` のような(0埋めではない)時刻表示はプラットフォーム依存のようだけど可能な模様

[code]

    # '%-H' のように '-' を途中に指定(UNIX系の場合)
    df_e.style.format_index(lambda dt: dt.strftime('%Y/%m/%d %-H:%M'))
    
    # 2021/08/01 0:00   1627248
    
[/code]

> This only works on Unix (Linux, OS X), not Windows (including Cygwin). On
> Windows, you would use `#`, e.g. `%Y/%#m/%#d`.

参考: [Python strftime - date without leading
0?](https://stackoverflow.com/questions/904928/)


CC BY-SA 4.0
2023-11-10T10:34:17.290
96737
2023-11-11T03:37:51.660
2023-11-11T03:37:51.660
43025
43025
96735
answer