如何从日期时间索引字符串中删除时间

问题描述

我的问题是如何从索引的字符串中删除时间部分。我正在导入一个带有分钟股票数据的 csv,代码如下所示:

import pandas as pd

df = pd.read_csv(f'/Volumes/Seagate Portable/S&P 500 List/AAPL.txt')

df.columns = ['Extra','Dates','Open','High','Low','Close','Volume']

df.Dates = pd.to_datetime(df.Dates)
df.set_index('Dates',inplace=True)
df = df.between_time('9:30','16:00')
df.drop(['Extra','Volume','Low'],axis=1,inplace=True)
df = df.groupby(pd.Grouper(freq='D')).agg({'Close':'last'})
df.index[0]

这会修改数据框以查找交易日的最后收盘价。输出结果是:

Timestamp('2020-01-02 00:00:00',freq='D')

所以我的问题是我想从字符串中删除时间 (00:00:00)。我不想做这样的事情:

` df.index = df.index.date)` 

 df['date'] = pd.to_datetime(df.index).dt.date

这是因为 df.index[0]输出将是:datetime.date(2020,1,2) 这不是我要找的。所以我尝试的是

for df_dates in df.index:
    string_df = f"{df_dates}"
    split_string_df = string_df.split(' ')
    df_dates = split_string_df[0]
    df.index[df_dates] = df_dates

这给了我错误 TypeError: Index does not support mutable operations 所以我正在寻找一种代码,它可以在我可以索引出 df['2020-2-12'] 而不是 df[datetime.date(2020,2)] 之后删除字符串的时间部分(我不确定,我假设这意味着修改显示而不是实际索引,但我不知道。)

解决方法

你有没有尝试过:

indexes =[]
for df_dates in df.index:
    string_df = f"{df_dates}"
    split_string_df = string_df.split(' ')
    df_dates = split_string_df[0]
    indexes.append( df_dates)
df.index = indexes

问题是您试图通过调用 df.index[<something>] = <otherthing> 来按索引修改索引,因为索引列表是不可变的,必须整体修改..