Как сопоставить данные о ценах активов из файла CSV в другой файл CSV с соответствующими новостями по дате - PullRequest
0 голосов
/ 04 июля 2019

Я исследую влияние настроений в новостных статьях, связанных с финансовым инструментом, и его потенциальное влияние на цену его инструментов. Я попытался получить временную метку каждого новостного элемента, урезать ее до минутных данных (т.е. удалить вторые и микросекундные компоненты) и получить базовую долю инструмента в это время, а также через несколько itervals после этого времени, в нашем случае t + 2. Тем не менее, программа создала twoM в файл, но не возвращает рассчитанные изменения цены

Ранее я использовал Reuters Eikon и его функции для проведения исследования, описанного в статье ниже.

https://developers.refinitiv.com/article/introduction-news-sentiment-analysis-eikon-data-apis-python-example

Однако вместо использования данных, доступных в Eikon, я хотел бы использовать свой собственный файл новостей csv с моими собственными данными о ценах из другого файла csv. Я пытаюсь соответствовать

excel_file = 'C:\\Users\\Artur\\PycharmProjects\\JRA\\sentimenteikonexcel.xlsx'
df = pd.read_excel(excel_file)
sentiment = df.Sentiment
print(sentiment)


start = df['GMT'].min().replace(hour=0,minute=0,second=0,microsecond=0).strftime('%Y/%m/%d')
end = df['GMT'].max().replace(hour=0,minute=0,second=0,microsecond=0).strftime('%Y/%m/%d')

spot_data = 'C:\\Users\\Artur\\Desktop\\stocksss.csv'
spot_price_10 = pd.read_csv(spot_data)
print(spot_price_10)

df['twoM'] = np.nan


for idx, newsDate in enumerate(df['GMT'].values):
    sTime = df['GMT'][idx]
    sTime = sTime.replace(second=0, microsecond=0)
    try:
        t0 = spot_price_10.iloc[spot_price_10.index.get_loc(sTime),2]
        df['twoM'][idx] = ((spot_price_10.iloc[spot_price_10.index.get_loc((sTime + datetime.timedelta(minutes=10))),3]/(t0)-1)*100)
    except:
        pass
print(df)

Однако программа не может вернуть два значения изменения цены

enter image description here

1 Ответ

0 голосов
/ 04 июля 2019

Я предполагаю, что вы получили предупреждение, потому что вы пытаетесь внести изменения в представления. Как только у вас есть 2 [] (один для столбца, один для строки), вы можете только читать. Вы должны использовать loc или iloc, чтобы написать значение:

...
try:
    t0 = spot_price_10.iloc[spot_price_10.index.get_loc(sTime),2]
    df.loc[idx,'twoM'] = ((spot_price_10.iloc[spot_price_10.index.get_loc((sTime + datetime.timedelta(minutes=10))),3]/(t0)-1)*100)
except:
    pass
...
...