Что означает: приведение данных Pandas к numpy dtype объекта. Проверьте входные данные с помощью np.asarray(data) и как это можно решить?

Я пытаюсь смоделировать временной ряд цены акций с помощью следующего кода:

import opendatasets as od
import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import tensorflow as tf

from sklearn.preprocessing import StandardScaler
from sklearn.inspection import permutation_importance
import statsmodels.api as sm
from statsmodels.tsa.stattools import acf, pacf
import datetime

import warnings
warnings.filterwarnings('ignore')

и я получил следующую структуру:

                     date         close
0   2021-01-04 04:00:00-05:00   133.740000
1   2021-01-04 05:00:00-05:00   133.600000
2   2021-01-04 06:00:00-05:00   134.220000
3   2021-01-04 07:00:00-05:00   133.750000
4   2021-01-04 08:00:00-05:00   134.020000
... ... ...
4070    2021-12-30 13:30:00-05:00   178.975006
4071    2021-12-30 14:30:00-05:00   178.960007
4072    2021-12-30 15:30:00-05:00   178.250000
4073    2021-12-30 16:00:00-05:00   178.190000
4074    2021-12-30 17:00:00-05:00   177.980000

В результате у меня есть

0    int64
dtype: object

Однако когда я пытаюсь разделить временной ряд для обучения и тестирования модели MLP и подогнать его следующим образом:

# splitting time series to train and test subsets
y_train = df.iloc[:-8766, :].copy()
y_test = df.iloc[-8766:, :].copy()

# Unobserved Components model definition
model = sm.tsa.UnobservedComponents(y_train,
                                    level='dtrend',
                                    irregular=True,
                                    stochastic_level = False,
                                    stochastic_trend = False,
                                    stochastic_freq_seasonal = [False, False, False],
                                    freq_seasonal=[{'period': 24, 'harmonics': 1},
                                                    {'period': 168, 'harmonics': 1},
                                                    {'period': 8766, 'harmonics': 2}])
# fitting model to train data
model_results = model.fit()

# printing statsmodels summary for model
print(model_results.summary())

Я получил следующую ошибку:

ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).

Я попытался преобразовать столбец date из строки в дату, но безуспешно.

np.asarray(df) возвращает следующее

array([['2021-01-04 04:00:00-05:00', 133.740000]
       ['2021-01-04 05:00:00-05:00', 133.600000]
       ['2021-01-04 06:00:00-05:00', 134.220000]
       ...
       ['2021-31-12 17:00:00-05:00', 177.980000]], dtype = object)

Я не знаю, проблема ли это в столбце даты или закрытия и что делать, чтобы это исправить.

если df['date'].dtype возвращается object, сначала попробуй df['date'] = pd.to_datetime(df['date'])

amance 16.07.2024 22:51

Та же ошибка ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data). Более того, при выполнении df['date'].dtype я получил dtype('O')

José 18.07.2024 09:57

AFAIR, «дата» должна быть индексом (даты или времени) кадра данных, а не обычным столбцом кадра данных.

Josef 19.07.2024 13:33

Насколько я понимаю, dtype неоднороден (datetime или, возможно, даже строка для первого столбца и float для второго). Можете ли вы вместо этого преобразовать столбец datetime в столбец с плавающей запятой (представляющий продолжительность в часах)?

Axel Gib 23.07.2024 15:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если проблема не устранена после использования df['date'] = pd.to_datetime(df['date']), возможно, в столбце 'date' есть некоторые значения, которых нет в 'datetime' dtype. Вы можете идентифицировать эти значения по следующему коду:

df['date'] = pd.to_datetime(df['date'], errors='coerce', utc=True)

Это установит эти значения на NaT(Not a Time). После этого вы можете обработать недостающие значения.

Другие вопросы по теме