将日期列和时间列合并到pandas数据框中的索引中

时间:2013-01-12 22:10:47

标签: python pandas

我在CSV文件中有一个30秒间隔的时间序列数据,格式如下:

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

如何使用这两种不同的索引方案将其读入pandas数据框:

1,将日期和时间合并为一个日期时间索引

2,使用日期作为主索引,将时间用作多索引数据框中的辅助索引

这两种方案的优点和缺点是什么?一般比另一个更优选吗?在我的情况下,我想看看时间分析,但我不完全确定哪个方案对我的目的更方便。提前谢谢。

1 个答案:

答案 0 :(得分: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. 使用date作为主索引,将time作为辅助索引 多索引数据框

    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
    

  3. 我天真的倾向是偏好多索引的单个索引。

    • 正如Python的禅宗断言,“扁平比嵌套好”。
    • 日期时间是一个概念对象。这样对待它。 (对于年,月,日,小时,分钟等,最好有一个日期时间对象而不是多个列。同样,最好有一个索引而不是两个。)

    然而,我对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), ...)