【问题标题】:TypeError: float() argument must be a string or a number, not 'Timestamp'TypeError:float() 参数必须是字符串或数字,而不是“时间戳”
【发布时间】:2019-07-07 15:07:18
【问题描述】:

我有一堆数据,我正在从这样的 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 learn 代码在下面,我试图以相同的类型错误跟随 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'

编辑

如果我打印 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')

【问题讨论】:

  • [c for c in columns if c not in ['kW', 'date']] 应该是 [c for c in columns if c not in ['kW', 'Date']]'date' 大写 'Date'。否则,您实际上并没有从列表中删除它columns
  • 我做错什么了吗?使用columns = [c for c in columns if c not in ['kW', 'Date']]clf = clf.fit(df[columns],df['kW']) 我仍然遇到同样的错误..
  • 看起来你有 3 列要开始 ['Date', 'Time', 'kW'] 但你指的是一列 'Date_Time' 我不清楚你的数据框中实际上是什么。无论哪种方式,您都有一个未被过滤掉的Timestamp 列。您正在尝试使用变量名称 columns 过滤您的数据框,但对它包含的内容或 df 包含的内容并不十分小心。解决此问题的一种方法是使用df.select_dtypes(include=np.number) 获取所有数字列。所以你可以做clf.fit(df.select_dtypes(include=np.number), df['kW'])
  • 您可以打印 df.columns 并更新帖子吗?不确定您是否有日期、时间或 Date_Time 列
  • 嗨@Vaishali,打印df.columns 给我Index(['Date_Time', 'kW', 'month', 'Day_of_week', 'hour', 'minute'], dtype='object')... 我的整个问题是我没有将Date_Time 设置为pd 索引吗?

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


【解决方案1】:

我猜你需要替换这一行

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

如果您的某些列是 'object' 或 'datetime',请将它们添加到 ['kW', 'Date_Time'] 列表中。

【讨论】:

  • 立即查看这篇文章。
猜你喜欢
  • 1970-01-01
  • 2017-08-29
  • 2022-01-09
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多