TypeError: аргумент float () должен быть строкой или числом, а не меткой времени - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть куча данных, которые я читаю из CSV-файла, подобного этому, в Pandas с df = pd.read_csv('C:\\User\\desktop\\master.csv', parse_dates=[['Date', 'Time']])

Date     Time        kW
3/1/2011 12:15:00 AM 171.36
3/1/2011 12:30:00 AM 181.44
3/1/2011 12:45:00 AM 175.68
3/1/2011 1:00:00 AM 180.00
3/1/2011 1:15:00 AM 175.68

, выполняющим df.head() печать:

            Date_Time    kW
0 2011-03-01 00:15:00 171.36
1 2011-03-01 00:30:00 181.44
2 2011-03-01 00:45:00 175.68
3 2011-03-01 01:00:00 180.00

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

df['month'] = df.Date_Time.dt.month
df['Day_of_week'] = df.Date_Time.dt.dayofweek
df['hour'] = df.Date_Time.dt.hour
df['minute'] = df.Date_Time.dt.minute

Не зная, что я делаю, мой код для sci kitузнайте ниже, где я пытаюсь следовать этому сообщению SO с той же ошибкой типа.

columns = df.columns.tolist()
columns = [c for c in columns if c not in ['kW', 'date']]
from sklearn import tree
clf = tree.DecisionTreeClassifier(max_depth=2, min_samples_leaf = (len(df)/100) )
clf = clf.fit(df[columns],df['kW'])

Создает ту же ошибку, что и сообщение SO выше, но решение не исправляет мойвыпуск: float() argument must be a string or a number, not 'Timestamp'

РЕДАКТИРОВАТЬ

Если я печатаю df.dtypes:

Date_Time      datetime64[ns]
kW                    float64
month                   int64
Day_of_week             int64
hour                    int64
minute                  int64
dtype: object

Если я печатаюa df.columns: Index(['Date_Time', 'kW', 'month', 'Day_of_week', 'hour', 'minute'], dtype='object')

1 Ответ

0 голосов
/ 13 февраля 2019

Я полагаю, вам нужно заменить эту строку

columns = [c for c in columns if c not in ['kW', 'date']]

на

columns = [c for c in columns if c not in ['kW', 'Date_Time']]

Ваш код должен выглядеть следующим образом:

columns = df.columns.tolist()
columns = [c for c in columns if c not in ['kW', 'Date_Time']]
from sklearn import tree
clf = tree.DecisionTreeClassifier(max_depth=2, min_samples_leaf = (len(df)/100) )
clf = clf.fit(df[columns],df['kW'])

Мы не можем использоватьстроковые столбцы в sciKit-learn.SciKit-learn принимает только числовые типы данных.Вы можете проверить dtypes вашего coluns, используя атрибут df.dtypes.

Если некоторые из ваших столбцов являются объектами или datetime, добавьте их в список ['kW', 'Date_Time'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...