Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

I got an error when extracting data from a csv file by pandas

I’m trying to get a signal out of aapl data but i got this error

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

apple_stock = pd.read_csv('AAPL.csv')
apple_stock = apple_stock.set_index(pd.DatetimeIndex(apple_stock['Date'].values))

ma30 = pd.DataFrame()
ma30['AM'] = apple_stock['Adj Close'].rolling(window=30).mean()

ma100 = pd.DataFrame()
ma100['AM'] = apple_stock['Adj Close'].rolling(window=100).mean()

data = pd.DataFrame()
data['AAPL'] = apple_stock['Adj Close']
data['MA30'] = ma30['AM']
data['MA100'] = ma100['AM']


def signal(data):
    signal_buy = []
    signal_sell = []
    f = -1

    for i in range(0, len(data)):

        if data['MA30'][i] > data['MA100']:
            if f != 1:
                signal_buy.append(data['AAPL'][i])
                signal_sell.append(np.nan)
                f = 1
            else:
                signal_buy.append(np.nan)
                signal_sell.append(np.nan)

        elif data['MA30'][i] < data['MA100']:
            if f != 0:
                signal_buy.append(np.nan)
                signal_sell.append(data['AAPL'][i])
                f = 0
            else:
                signal_buy.append(np.nan)
                signal_sell.append(np.nan)

        else:
            signal_buy.append(np.nan)
            signal_sell.append(np.nan)

    return signal_buy, signal_sell


buy_sell = signal(data)

data['buy signal'] = buy_sell[0]
data['sell signal'] = buy_sell[1]

print(data)

This is the error it gives:

Traceback (most recent call last):
File "C:/Users/k.taherinia/Desktop/Stock analysis and forecasting/moving_average_indicator.py", line 53, in
buy_sell = signal(data)
File "C:/Users/k.taherinia/Desktop/Stock analysis and forecasting/moving_average_indicator.py", line 28, in signal
if data[‘MA30’][i] > data[‘MA100’]:
File "C:\Users\k.taherinia\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\generic.py", line 1527, in nonzero
raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Some people had the same problem with(and/or in pandas), but I could not find a solution for my code

>Solution :

You cannot in one side use the [i] locator, and on the other side set it free. But, to do what you are expecting, here is a easy way :

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

apple_stock = pd.read_csv('AAPL.csv')
apple_stock = apple_stock.set_index(pd.DatetimeIndex(apple_stock['Date'].values))

ma30 = pd.DataFrame()
ma30['AM'] = apple_stock['Adj Close'].rolling(window=30).mean()

ma100 = pd.DataFrame()
ma100['AM'] = apple_stock['Adj Close'].rolling(window=100).mean()

data = pd.DataFrame()
data['AAPL'] = apple_stock['Adj Close']
data['MA30'] = ma30['AM']
data['MA100'] = ma100['AM']

data['buy_signal'] = np.where(data.MA30 > data.MA100,1,0)
data['sell_signal'] = np.where(data.MA30 < data.MA100,1,0)

print(data)

Note that you can also do unique signal column with :

data['signal'] =  np.where(data.MA30 > data.MA100,1,np.where(data.MA30 < data.MA100,-1,0))
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading