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

5 python pandas

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

20120105, 080000,   1
20120105, 080030,   2
20120105, 080100,   3
20120105, 080130,   4
20120105, 080200,   5
Run Code Online (Sandbox Code Playgroud)

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

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

2,使用date作为主索引,使用time作为multiindex数据帧中的辅助索引

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

unu*_*tbu 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用date作为主索引,将time作为multiindex数据帧中的二级索引

    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
    
    Run Code Online (Sandbox Code Playgroud)

我天真的倾向是偏好多指数的单一指数.

  • 正如Python的Zen所言,"Flat比嵌套更好".
  • 日期时间是一个概念对象.这样对待它.(对于年,月,日,小时,分钟等,最好有一个日期时间对象而不是多个列.同样,最好有一个索引而不是两个.)

但是,我对Pandas不是很有经验,在进行时间分析时使用多索引可能会有一些优势.

我会尝试两种方式编写一些典型的计算方法,然后根据编码的简易性,可读性和性能来看看哪一个我更喜欢.


这是我的设置,以产生上述结果.

import io
import pandas as pd

text = '''\
20120105, 080000,   1
20120105, 080030,   2
20120105, 080100,   3
20120105, 080130,   4
20120105, 080200,   5'''
Run Code Online (Sandbox Code Playgroud)

你当然可以使用

pd.read_csv(filename, ...)
Run Code Online (Sandbox Code Playgroud)

代替

pd.read_csv(io.BytesIO(text), ...)
Run Code Online (Sandbox Code Playgroud)