5

次の形式の CSV ファイルに、日中の 30 秒間隔の時系列データがあります。

20120105, 080000,   1
20120105, 080030,   2
20120105, 080100,   3
20120105, 080130,   4
20120105, 080200,   5

次の 2 つの異なるインデックス スキームを使用して pandas データ フレームに読み込むにはどうすればよいですか。

1、日付と時刻を単一の日時インデックスに結合する

2、マルチインデックス データフレームで、日付をプライマリ インデックスとして、時刻をセカンダリ インデックスとして使用する

これら2つのスキームの長所と短所は何ですか? 一般的に、一方が他方よりも優れていますか? 私の場合、時刻分析を検討したいと思いますが、どのスキームが私の目的にとってより便利であるかは完全にはわかりません。前もって感謝します。

4

1 に答える 1

7
  1. 日付と時刻を単一の日時インデックスに結合する

    df = pd.read_csv(io.BytesIO(text), parse_dates = [[0,1]], header = None, index_col = 0)
    print(df)
    #                      2
    # 0_1                   
    # 2012-01-05 08:00:00  1
    # 2012-01-05 08:00:30  2
    # 2012-01-05 08:01:00  3
    # 2012-01-05 08:01:30  4
    # 2012-01-05 08:02:00  5
    
  2. マルチインデックス データフレームで、プライマリ インデックスとして日付を使用し、セカンダリ インデックスとして時刻を使用します。

    df2 = pd.read_csv(io.BytesIO(text), parse_dates = True, header = None, index_col = [0,1])
    print(df2)
    #                   2
    # 0          1       
    # 2012-01-05 80000  1
    #            80030  2
    #            80100  3
    #            80130  4
    #            80200  5
    

私の素朴な傾向は、マルチインデックスよりも単一のインデックスを好むことです。

  • Zen of Python が主張するように、「フラットはネストよりも優れています」。
  • 日時は 1 つの概念的なオブジェクトです。そのように扱ってください。(年、月、日、時、分などの複数の列よりも、1 つの datetime オブジェクトを使用する方が適切です。同様に、2 つよりも 1 つのインデックスを使用する方が適切です。)

ただし、私は Pandas の経験があまりないため、時刻分析を行うときにマルチインデックスを使用すると、いくつかの利点がある可能性があります。

両方の方法でいくつかの典型的な計算をコーディングしてみて、コーディングの容易さ、読みやすさ、およびパフォーマンスに基づいて、どちらが良いかを判断しました。


これは、上記の結果を生成するための私の設定でした。

import io
import pandas as pd

text = '''\
20120105, 080000,   1
20120105, 080030,   2
20120105, 080100,   3
20120105, 080130,   4
20120105, 080200,   5'''

もちろん使えます

pd.read_csv(filename, ...)

それ以外の

pd.read_csv(io.BytesIO(text), ...)
于 2013-01-12T22:54:41.380 に答える