#python #pandas #visual-studio #dataframe
Вопрос:
У меня есть следующая таблица данных о пандах:
Приведенное выше изображение-это просто данные, которые я получил от yfinance для фондовых новостей AAPL. Это фрейм данных pandas, содержащий множество дат из другого вызова API, в котором указаны даты для конкретных новостей
У меня есть следующий код:
df['Boolean'] = df['Open'] < df['Close']
print(df)
if df['Boolean'] == 'False':
for h in range(0, k):
if newsdf[h] == df['Date']:
print('Bearish signal ')
print(h)
else:
print('Signal bullish')
Я получаю ошибку: значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all().
Редактировать: Я вижу, что сравниваю все логическое значение, и я не могу этого сделать, но как бы я мог перебрать логический столбец, посмотреть, является ли значение «Истинным» или «Ложным», сравнить значение с newsdf и распечатать этот индекс
Комментарии:
1. Что
k
у вас в коде?2.
df['Boolean']
представляет собой целый столбец значений, либоTrue
илиFalse
, с некоторыми из них. Вы пытаетесь сравнить весь этот столбец с одной строкой"False"
, что никогда не будет правдой. Но вы не можете рассматривать весь столбец как одно значение.3. @Tuqay k-это len(list1), в основном строка фрейма данных
4. @TimRoberts, значит, мне просто нужен цикл for прямо перед этим?
5. @TimRoberts как бы вы повторили только логический столбец, чтобы проверить, является ли он ложным?
Ответ №1:
попробуйте это, комментарии были помещены против строки кода.
#package import
import pandas as pd
from io import StringIO
#data setup
newdf=pd.DataFrame({"h":['2021-01-04']})
raw_data=
'''
Date Open Boolean
2021-01-04 132 False
2021-01-05 120 True
2021-01-06 123 False
'''
df=pd.read_csv(StringIO(raw_data),sep=" ")
#function to have a use case logic
def check_the_signal(df_row,newdf=newdf):
if not df_row['Boolean']: # this is false
if df_row['Date'] in list(newdf['h']): # caution when newdf is large dataset,list will be large
return 'Bearish signal '
else:
return 'Signal bullish'
else:
return "Neutral" # added for demo only!
df['single']=df.apply(check_the_signal,axis=1)# axis == 1 will send data at row level , saving the value in df, in case needed
Комментарии:
1. Эй, спасибо, что ответили. У меня есть несколько вопросов, так что же делает newdf, например, я вижу, что он создает новую колонку с данными 2021-01-04, так что в моем случае, что бы это было, мне трудно понять
2. я получил это из вашего фрагмента кода
if newsdf[h] == df['Date']
, поэтому вместо большого фрейма данных я создаю фрейм данных только с одним столбцом, используя словарь{"h":['2021-01-04']}
.3. поэтому мне просто нужно это df=pd.read_csv(StringIO(yahoo.csv),sep=» «) и распечатать(df), чтобы увидеть, что он сделал, и когда я распечатаю его, я не получу таблицу
4. если возможно, сможете ли вы прокомментировать каждую строку lol, а также можете ли вы получить данные от yfinance lol
5. я думаю, что StringIO не работает с csv-файлами?