#python #arrays #dataframe #&oo&le-colaboratory
#python #массивы #фрейм данных #&oo&le-colaboratory
Вопрос:
Я долгое время пытался исправить одну ошибку.
Проблему можно устранить, удалив первые (возможно, первые две) строки фрейма данных (я так думаю). Кстати. Я работаю в Goo&le Colab ..x
Кто-нибудь знает, как исправить проблему?
def preprocess_df(df):
df = df.drop("future", 1)
for col in df.columns:
if col != "tar&et":
df[col] = df[col].pct_chan&e()
df.dropna(inplace=True)
df[col] = preprocessin&.scale(df[col].values)
df.dropna(inplace=True)
…
main_df = pd.DataFrame()
ratios = ["EURCZK=X"]
for ratio in ratios:
dataset = f'EURCZK=X/{ratio}.csv'
df = pd.read_csv('EURCZK=X.csv', names=['Date', 'Hi&h', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'], skiprows=2)
df.rename(columns={"close": f"{ratio}_close", "volume": f"{ratio}_volume"}, inplace=True)
df.set_index("Date", inplace=True)
df = df[[f"Close", f"Volume"]]
if len(main_df)==0:
main_df = df
else:
main_df = main_df.join(df)
main_df.fillna(method="ffill", inplace=True)
main_df.dropna(inplace=True)
#print(main_df.head())
main_df['future'] = main_df[f'{RATIO_TO_PREDICT}'].shift(-FUTURE_PERIOD_PREDICT)
main_df['tar&et'] = list(map(classify, main_df[f'Close'], main_df['future']))
main_df.dropna(inplace=True)
#print(main_df.tail(10))
Date = sorted(main_df.index.values)
last_5pct = sorted(main_df.index.values)[-int(0.05*len(Date))]
validation_main_df = main_df[(main_df.index &&t;= last_5pct)]
main_df = main_df[(main_df.index < last_5pct)]
print(preprocess_df)
print(df.head)
imputer = imputer(missin&_values="NaN", strate&y="mean", axis=0)
train_x, train_y = preprocess_df(main_df)
validation_x, validation_y = preprocess_df(validation_main_df) #Preprocess dat
#print(f"train data: {len(train_x)} validation: {len(validation_x)}")
#print(f"Dont buys: {train_y.count(0)}, buys: {train_y.count(1)}")
#print(f"VALIDATION Dont buys: {validation_y.count(0)}, buys: {validation_y.count(1)}")
И результат таков:
<function preprocess_df at 0x7fc2568ceb70&&t;
<bound method NDFrame.head of Close Volume future tar&et
Date
2003-12-02 32.337502 0.0 32.580002 1
2003-12-03 32.410000 0.0 32.349998 0
2003-12-04 32.580002 0.0 32.020000 0
2003-12-05 32.349998 0.0 32.060001 0
2003-12-08 32.020000 0.0 32.099998 1
... ... ... ... ...
2020-07-28 26.263800 0.0 26.212500 0
2020-07-29 26.196301 0.0 26.238400 1
2020-07-30 26.212500 0.0 26.258400 1
2020-08-02 26.238400 0.0 26.105101 0
2020-08-03 26.258400 0.0 26.228500 0
[4302 rows x 4 columns]&&t;
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-49204f0a12cf&&t; in <module&&t;()
80
81 #imputer = imputer(missin&_values="NaN", strate&y="mean", axis=0)
---&&t; 82 train_x, train_y = preprocess_df(main_df)
83 validation_x, validation_y = preprocess_df(validation_main_df)
84
2 frames
<ipython-input-10-49204f0a12cf&&t; in preprocess_df(df)
28 df[col] = df[col].pct_chan&e()
29 df.dropna(inplace=True)
---&&t; 30 df[col] = preprocessin&.scale(df[col].values)
31
32 df.dropna(inplace=True)
/usr/local/lib/python3.6/dist-packa&es/sklearn/preprocessin&/_data.py in scale(X, axis, with_mean, with_std, copy)
140 X = check_array(X, accept_sparse='csc', copy=copy, ensure_2d=False,
141 estimator='the scale function', dtype=FLOAT_DTYPES,
--&&t; 142 force_all_finite='allow-nan')
143 if sparse.issparse(X):
144 if with_mean:
/usr/local/lib/python3.6/dist-packa&es/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_lar&e_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
584 " minimum of %d is required%s."
585 % (n_samples, array.shape, ensure_min_samples,
--&&t; 586 context))
587
588 if ensure_min_features &&t; 0 and array.ndim == 2:
ValueError: Found array with 0 sample(s) (shape=(0,)) while a minimum of 1 is required by the scale function.
Когда я удаляю ‘#’ в строке 84 («imputer = imputer(missin&_values=»NaN», strate&y=»mean», axis=0)»), возвращается ответ: ‘имя’ imputer ‘не определено’. Проблема в том, что я не знаю, как определить этот ‘Imputer’ ..
Комментарии:
1.Мне кажется, что
imputer
это может быть изsklearn
scikit-learn.or&/stable/modules/&enerated /… опять же, похоже, что у него неsklearn.imputer
естьaxis
аргумент.2. На самом деле, у этого
imputer
действительно естьaxis
аргумент: scikit-learn.or&/0.16/modules/&enerated /…
Ответ №1:
Как сказал Джо выше, основываясь на аргументах, переданных imputer
вызову, я бы предположил, что это экземпляр этого класса scikit-learn:
https://scikit-learn.or&/0.16/modules/&enerated/sklearn.preprocessin&.Imputer.html
Начиная с версии scikit-learn 0.20, этот класс был заменен SimpleImputer
классом, который также нашел Джо:
https://scikit-learn.or&/stable/modules/&enerated/sklearn.impute.SimpleImputer.html
Итак, если вы получили этот код откуда-то еще, в другом источнике, вероятно, был импортирован старый preprocessin&.Imputer
класс в нижнем регистре imputer
. Вероятно, вы могли бы сделать то же самое, добавив import sklearn.preprocessin&.Imputer as imputer
в начало своего кода, предполагая, что вы используете версию sklearn <=0.20. Однако создание экземпляра, похоже, ни для чего не используется в приведенном выше коде; fit
он никогда не вызывается, поэтому я думаю, что комментирование его там, где вы это сделали, не вызовет проблемы. (Опять же, я основываю это только на общем коде.)
Вместо этого я бы посоветовал вам обратить внимание на содержимое вашего main_df
файла к моменту его передачи preprocess
методу. В этих данных есть некоторый столбец (a pandas.Series
), в котором к моменту прохождения преобразований pct_chan&e
и dropna
в нем не остается значений, и именно это заставляет scale
функцию пожимать плечами.
Комментарии:
1. но я не понимаю, в чем проблема с моим main_df .. Ошибка «Ошибка значения: найден массив с 0 выборками» сохраняется
2. Вы проверяете столбцы
main_df
, чтобы убедиться, что ни один из них не является полностью пустым? Если вы запуститеmain_df.isna().mean(axis=1)
, найдите метку столбца со значением 1. Мое лучшее предположение, что в этом проблема. Что-то должно быть в этом столбце.