导入时间数据与日期分开,没有添加日期 - python

导入典型的盘中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],我得到

                            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中简洁地做到这一点?非常感谢!

(ps,我知道可以将'Date'和'Time'合并为一个DateTimeindex。但是,在以后的处理中,将'Date'和'Time'分开并分层具有很多优点:例如,我经常需要在所有不同的日期运行相同的时间间隔分析。)

python参考方案

因此,您可以创建时间列并通过set_index追加到索引,或者通过timetimedeltas s转换为to_timedelta

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)

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python:来自dict系列的Pandas数据框 - python

我有一个熊猫数据框:type(original) pandas.core.frame.DataFrame 其中包括系列对象original['user']:type(original['user']) pandas.core.series.Series original['user']指向许多命令:…