【问题标题】:Combine date column and time column into index in pandas data frame将日期列和时间列合并到熊猫数据框中的索引中
【发布时间】:2012-12-27 05:34:48
【问题描述】:

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

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

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

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

2、在多索引数据帧中使用日期作为主索引,时间作为二级索引

这两种方案的优缺点是什么?一个通常比另一个更可取吗?就我而言,我想查看时间分析,但不完全确定哪种方案更适合我的目的。提前致谢。

【问题讨论】:

  • 对于一天中的时间分析,一旦您创建了适当的 DatetimeIndex,您应该使用 at_timebetween_time 方法很好地覆盖。

标签: python pandas


【解决方案1】:
  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), ...)

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 2014-07-30
    • 2017-05-22
    • 1970-01-01
    • 2019-06-27
    • 2017-07-24
    • 2021-03-12
    • 2021-12-29
    相关资源
    最近更新 更多