TypeError:无法将值 dtype('<M8[ns]') 转换为 TensorFlow DType
Posted
技术标签:
【中文标题】TypeError:无法将值 dtype(\'<M8[ns]\') 转换为 TensorFlow DType【英文标题】:TypeError: Cannot convert value dtype('<M8[ns]') to a TensorFlow DTypeTypeError:无法将值 dtype('<M8[ns]') 转换为 TensorFlow DType 【发布时间】:2018-06-11 18:56:38 【问题描述】:不知道为什么会出现此错误。我正在关注a Tensorflow tutorial,但正在更改数据源。
只有两个真正的变体。一是我导入了两个 CSV 和 .merge
它们:
df = df_a.merge(df_b, how='left', on='race_id', sort=True)
另一个是我必须解析一列时间如下:
def parse_time(t):
minutes, seconds, centiseconds = t.split('.')
milliseconds = int(centiseconds) * 10 + int(seconds) * 1000 + int(minutes) * 60 * 1000
return milliseconds
df_a['e'] = df_a['d'].map(parse_time).astype(np.int32)
现在df.dtypes
显示:
a object
b float32
c int32
d object
e int32
dtype: object
我已经小心地清除了所有的 NaN。我不知道从哪里开始这个错误。任何建议都将受到欢迎!
【问题讨论】:
dtype('<M8[ns]')
表示datetime64[ns]
,是一个numpy类型。看来tensorflow不支持日期,所以需要先转换成int64
这很奇怪。有一个datetime64
,但它没有被送到LinearRegressor
?所以它必须尝试解析所有列,即使它们没有全部使用?!感谢您的提示!
【参考方案1】:
我遇到了类似的问题。
在我的例子中数据框的索引被日期时间列替换了。在我的例子中,我正在构建一个神经网络,然后这个索引不再导入,所以只修复了重置索引。
所以,执行:
df = df.reset_index(drop=True)
并删除列(如果您像我一样替换索引):
df = df.drop('foo_date',1)
【讨论】:
以上是关于TypeError:无法将值 dtype('<M8[ns]') 转换为 TensorFlow DType的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:在绘制 seaborn.regplot 时,无法根据规则“安全”将数组数据从 dtype('int64') 转换为 dtype('int32')
TypeError: Iterator operand 0 dtype could not be cast from dtype('<M8[us]') to dtype('
TypeError:无法将值''视为常量,因为它具有未知的类型'function'
Scipy hstack 导致“TypeError:类型不支持转换:(dtype('float64'),dtype('O'))”
获取 TypeError:尝试使用 idxmax() 时,此 dtype 不允许缩减操作 'argmax'
TypeError: 数组 dtype ('|S32') 和格式说明符 ('%.7f %.7f %.7f %s') 不匹配