5

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

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

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

1、将日期和时间组合成一个日期时间索引

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
    

我的天真倾向是更喜欢单个索引而不是多索引。

  • 正如 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), ...)
于 2013-01-12T22:54:41.380 回答