当我通过他们的API查询服务以获取每日数据时,他们会投入一个时间部分,该部分等于查询的生成时间。所以当我在14:54:36调用函数时,我的pandas数据框看起来像这样 -
2018-05-16 14:54:36 1024.75 1008.25 ... 39221 242897
2018-05-17 14:54:36 1017.00 1002.00 ... 35361 241132
2018-05-18 14:54:36 1015.75 1002.75 ... 49090 242938
2018-05-21 14:54:36 1034.50 1020.75 ... 56950 243316
2018-05-22 14:54:36 1043.75 1028.50 ... 49724 247874
2018-05-23 14:54:36 1049.00 1036.25 ... 46256 253609
2018-05-24 14:54:36 1059.75 1047.00 ... 65352 259617
由于这是每日数据,因此时间部分无用。当我这样做时:
data = pd.read_csv(StringIO(data), index_col=0, header=None,names=['High','Low','Open','Close','Volume','OpenInterest'])
data.index = pd.to_datetime(data.index,format="%Y-%m-%d")
格式似乎不起作用。 DateTime索引仍包含时间。知道如何删除时间部分吗?
答案 0 :(得分:5)
使用date
属性:
df.index = df.index.date
示例:
>>> df = pd.DataFrame([1, 2, 3, 4], index=pd.date_range('2018', periods=4, freq='H'))
>>> df.index = df.index.date
>>> df
0
2018-01-01 1
2018-01-01 2
2018-01-01 3
2018-01-01 4
注意:这会让你在Pandas中获得object
dtype。所有属性均为here。它在技术上是一组本机Python datetime.date
对象。请参阅ALollz的答案,以保持dtype类似日期时间。
答案 1 :(得分:3)
还可以选择维护日期时间功能,但只需将时间部分设置为00:00:00
df.index = df.index.normalize()
import pandas as pd
df = pd.DataFrame([1, 2, 3, 4], index=pd.date_range('2018', periods=4, freq='H'))
df.index = df.index.normalize()
df
现在是:
0
2018-01-01 1
2018-01-01 2
2018-01-01 3
2018-01-01 4
查看索引:
df.index
#DatetimeIndex(['2018-01-01', '2018-01-01', '2018-01-01', '2018-01-01'], dtype='datetime64[ns]', freq=None)
值为Timestamps:
df.index[0]
#Timestamp('2018-01-01 00:00:00')
答案 2 :(得分:0)
def set_date_range(start_date, number_of_periods, frequency):
date_range = pd.date_range(start= start_date, periods=number_of_periods, freq=frequency)
for date in date_range:
print(date)
print()
set_date_range('1/1/2018', 5, "MS")
def set_date_range(start_date, number_of_periods, frequency):
date_range = pd.date_range(start= start_date, periods=number_of_periods, freq=frequency)
date_range = date_range.date # ASSIGNING THIS GETS RID OF THE TIME PORTION
for date in date_range:
print(date)
print()
set_date_range('1/1/2018', 5, "MS")