我在 CSV 文件中有一个日内 30 秒间隔时间序列数据,格式如下:
20120105, 080000, 1
20120105, 080030, 2
20120105, 080100, 3
20120105, 080130, 4
20120105, 080200, 5
如何使用这两种不同的索引方案将其读入 pandas 数据框中:
1、将日期和时间组合成一个日期时间索引
2、在multiindex dataframe中使用date作为主索引,time作为辅助索引
这两种方案的优缺点是什么?一个通常比另一个更受欢迎吗?就我而言,我想查看每日分析,但不完全确定哪种方案更适合我的目的。提前致谢。
最佳答案
将日期和时间组合成一个日期时间索引
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
使用日期作为主索引,时间作为辅助索引 多索引数据框
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/