2017-03-07 6 views
2

datetime.dateを含むpandasDataFrameがあります。マルチレベルインデックスを設定すると、日付カラムはdatetime.datetimeオブジェクトに変換されます。これは、単一レベルインデックスの設定時には発生しません。これは正常な動作ですか? dateタイプのマルチレベルインデックスを定義するにはどうすればよいですか? =アナコンダ2.3.0 マルチレベルインデックスの日付をpandasデータフレームのdatetimeに変更する

  • パンダ| Pythonの3.4.5

    • print(df_multi.index) 
      # MultiIndex(levels=[['a'], [2015-01-01 00:00:00, 2015-01-02 00:00:00]], 
      #   labels=[[0, 0], [0, 1]], 
      #   names=['id', 'date']) 
      
      print(df_single.index) 
      # Index([2015-01-01, 2015-01-02], dtype='object', name='date')  
      

      情報については、私は次のバージョンを使用しています:ここで

      import datetime 
      import pandas as pd 
      values = [("a", datetime.date(2015,1,1), 30.),                                 
            ("a", datetime.date(2015,1,2), 25.)]                                 
      columns = ["id", "date", "amount"]                            
      df = pd.DataFrame(values, columns=columns)                                       
      df_single = df.set_index("date") 
      df_multi = df.set_index(["id", "date"]) 
      

      が出力されます= 0.19.2
  • 答えて

    0

    日付型を保持するマルチレベルインデックスを定義するにはどうすればよいですか?

    回避策:

    インデックスの一部を置換することが可能です。

    df_multi.index.set_levels([df['date'].values], level=[1], inplace=True) 
    

    回避策結果:だからあなたの例では、マルチインデックスを適用した後、datetimedateのように置き換えることができ

    >>> print(df_multi.index) 
    MultiIndex(levels=[[u'a'], [2015-01-01, 2015-01-02]], 
          labels=[[0, 0], [0, 1]], 
          names=[u'id', u'date']) 
    

    なぜ?あなたの最初の質問に

    が、これは正常な動作ですか?

    このコードは間違いなく正常です。あなたが見ている効果は仕様ですかない、しかし、あなたが問題hereを開くことができれば、私は知らない

    values = _possibly_infer_to_datetimelike(values, convert_dates=True) 
    

    :この動作は経由datetime64dateを推進して終わるpandas.core.categorical.Categorical()の副作用です。

    +0

    ありがとうございました!この回避策は私のためのトリックを行います。しかし、私の意見では、それはまだ予期せぬ副作用です。私は問題を開くでしょう。 – ldocao

    +0

    投稿した問題は次のとおりです。https://github.com/pandas-dev/pandas/issues/15636 – ldocao

    関連する問題