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

标签 python pandas

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

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

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

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

2、在multiindex dataframe中使用date作为主索引,time作为辅助索引

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

最佳答案

  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), ...)

关于python - 将日期列和时间列合并到 Pandas 数据框中的索引中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298447/

相关文章:

python - django在模型之间建立正确的关系

python - 如何在cv2 python中将灰色图像转换为彩色图像

python - 提高 pandas bool 索引的速度

python - pandas 数据框中前几行的累积计数

Python2 在 Pandas DataFrame 中选择数据的速度比 Python3 快......为什么?

python - 如何选择列表中的第一项

python - 我怎样才能从 Python 的 namedtuple 获得降序的 OrderedDict?

python - 输入和输出 numpy 数组到 h5py

python - Pandas:为未知数量的添加列提供(字符串+编号)名称

python - 将列标题转换为第一行,将行标题转换为 Pandas 数据框中的第一列