TypeError:float()参数必须是字符串或数字,而不是'Timestamp'

时间:2019-02-13 17:19:08

标签: python pandas machine-learning scikit-learn data-science

我有一堆数据正在从这样的CSV文件中读取,并通过 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学习代码在下面的位置,我尝试按照相同的类型错误跟随this SO post

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'

EDIT

如果我打印df.dtypes

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

如果我打印df.columnsIndex(['Date_Time', 'kW', 'month', 'Day_of_week', 'hour', 'minute'], dtype='object')

1 个答案:

答案 0 :(得分:0)

我想您需要替换此行

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学习仅接受数字数据类型。 您可以使用df.dtypes属性来检查您的coluns dtypes。

如果您的某些列是“对象”或“日期时间”,请将它们添加到['kW','Date_Time']列表中。