我在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数据帧中的辅助索引
这两种方案的利弊是什么?一般比另一个更优选吗?在我的情况下,我想看看时间分析,但我不完全确定哪个方案对我的目的更方便.提前致谢.
将日期和时间合并为单个日期时间索引
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)使用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)我天真的倾向是偏好多指数的单一指数.
但是,我对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)