I would like to predict future stock price and I tried to create calculate function but when I run code below I found an error. I am not sure if I missing (), or not. Could you please advice me?
import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf Gold_train_data = pd.read_csv('Gold Data Last Year.csv', index_col=False) Gold_test_data = pd.read_csv('Gold Data Last Month.csv', index_col=False) current_train_data = Gold_train_data current_test_data = Gold_test_data NUM_train_data = 266 NUM_test_data = 22 def load_stock_data(stock_name, num_data_points): data = pd.read_csv(stock_name, skiprows=0, nrows=num_data_points, usecols=['Price', 'Open', 'Vol.']) final_prices = data['Price'].astype(str).str.replace(',','').astype(np.float) opening_prices = data['Open'].astype(str).str.replace(',', '').astype(np.float) volumes = data['Vol.'].str.strip('MK').astype(np.float) return final_prices, opening_prices, volumes def calculate_price_differences(final_prices, opening_prices): price_differences = [] for d_i in range(len(final_prices) - 1): price_difference = opening_prices[d_i + 1] - final_prices[d_i] price_differences.append(price_difference) return price_differences print(load_stock_data(current_test_data, NUM_test_data))
The above is the code and the below is the error shown as below:
Traceback (most recent call last): Input In [6] in <cell line: 1> print(load_stock_data(current_test_data, NUM_test_data)) Input In [4] in load_stock_data data = pd.read_csv(stock_name, File ~Anaconda3libsite-packagespandasutil_decorators.py:311 in wrapper return func(*args, **kwargs) File ~Anaconda3libsite-packagespandasioparsersreaders.py:680 in read_csv return _read(filepath_or_buffer, kwds) File ~Anaconda3libsite-packagespandasioparsersreaders.py:575 in _read parser = TextFileReader(filepath_or_buffer, **kwds) File ~Anaconda3libsite-packagespandasioparsersreaders.py:933 in __init__ self._engine = self._make_engine(f, self.engine) File ~Anaconda3libsite-packagespandasioparsersreaders.py:1217 in _make_engine self.handles = get_handle( # type: ignore[call-overload] File ~Anaconda3libsite-packagespandasiocommon.py:661 in get_handle if _is_binary_mode(path_or_buf, mode) and "b" not in mode: File ~Anaconda3libsite-packagespandasiocommon.py:1128 in _is_binary_mode return isinstance(handle, _get_binary_io_classes()) or "b" in getattr( TypeError: argument of type 'method' is not iterable
Advertisement
Answer
The issue is with the function call
print(load_stock_data(current_test_data, NUM_test_data))
current_test_data
was the pandas dataframe you loaded previously. Passing the variable to load_stock_data()
results in the function trying to execute
data = pd.read_csv(current_test_data, skiprows=0, nrows=num_data_points, usecols=['Price', 'Open', 'Vol.'])
Note that by default the first argument to pd.read_csv() by convention is the pathname to the csv file. Hence the
error arises when it thinks current_test_data
is the pathname but it is actually a pandas.DataFrame.
What I think you want to do could be achieved by using
print(load_stock_data('Gold Data Last Month.csv', NUM_test_data))
instead. Feeding the pathname to the function call instead of the dataframe itself.