导入典型的日内 1 分钟间隔股票数据文件时:
data7 = pd.read_csv('Documents/spy1min.txt', parse_dates=[0], index_col=[0, 1], usecols=['Date','Time','Open','High','Low','Close'])
结果数据框如下所示:
Open High Low Close
Date Time
2016-12-14 08:01 227.80 227.91 227.76 227.77
08:02 227.78 227.78 227.77 227.77
08:03 227.77 227.77 227.77 227.77
08:04 227.76 227.76 227.76 227.76
但是,索引的“时间”部分现在是字符串,而不是被识别为时间。
如果我在上面的代码中设置 parse_dates=[1] ,我会得到 p>
Open High Low Close
Date Time
12/14/2016 2018-12-14 08:01:00 227.80 227.91 227.76 227.77
2018-12-14 08:02:00 227.78 227.78 227.77 227.77
2018-12-14 08:03:00 227.77 227.77 227.77 227.77
这两个选项都不理想:我不希望将今天的日期任意添加到“时间”中,但我希望将“时间”表示为实时而不是字符串。有没有办法在 python 中简洁地做到这一点?非常感谢!
(p.s.我知道我可以将“Date”和“Time”组合成一个DateTimeindex。但是在我以后的处理中,保持“Date”和“Time”分离和分层有很多好处:例如,我通常需要在所有不同的日期运行相同的时间间隔分析。)
最佳答案
因此,您可以创建时间列并通过 set_index
附加到索引,或通过 to_timedelta
将 time
转换为 timedeltas
:
import pandas as pd
temp=u"""Date,Time,Open,High,Low,Close
2016-12-14,08:01,227.80,227.91,227.76,227.77
2016-12-14,08:02,227.78,227.78,227.77,227.77
2016-12-14,08:03,227.77,227.77,227.77,227.77
2016-12-14,08:04,227.76,227.76,227.76,227.76"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp),
index_col=[0],
parse_dates=[0],
usecols=['Date','Time','Open','High','Low','Close'])
print (df)
Time Open High Low Close
Date
2016-12-14 08:01 227.80 227.91 227.76 227.77
2016-12-14 08:02 227.78 227.78 227.77 227.77
2016-12-14 08:03 227.77 227.77 227.77 227.77
2016-12-14 08:04 227.76 227.76 227.76 227.76
<小时/>
df['Time'] = pd.to_datetime(df['Time']).dt.time
df = df.set_index('Time', append=True)
print (df)
Open High Low Close
Date Time
2016-12-14 08:01:00 227.80 227.91 227.76 227.77
08:02:00 227.78 227.78 227.77 227.77
08:03:00 227.77 227.77 227.77 227.77
08:04:00 227.76 227.76 227.76 227.76
print (df.index.get_level_values(1))
Index([08:01:00, 08:02:00, 08:03:00, 08:04:00], dtype='object', name='Time')
print (type(df.index.get_level_values(1)[0]))
<class 'datetime.time'>
<小时/>
df['Time'] = pd.to_timedelta(df['Time'] + ':00')
df = df.set_index('Time', append=True)
print (df)
Open High Low Close
Date Time
2016-12-14 08:01:00 227.80 227.91 227.76 227.77
08:02:00 227.78 227.78 227.77 227.77
08:03:00 227.77 227.77 227.77 227.77
08:04:00 227.76 227.76 227.76 227.76
print (df.index.get_level_values(1))
TimedeltaIndex(['08:01:00', '08:02:00', '08:03:00', '08:04:00'],
dtype='timedelta64[ns]', name='Time', freq=None)
关于python - 与日期分开导入时间数据并且不添加日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778650/