TensorFlow TypeError:无法隐式将numpy.int64转为字符串(附Jupyter代码)
搞定TensorFlow里的'numpy.int64'转字符串类型错误
嘿,我来帮你解决这个头疼的类型转换问题!你遇到的这个错误,大概率是把DataFrame里的numpy整数类型数据喂给TensorFlow的时候触发的——TensorFlow可不会自动帮你把numpy.int64隐式转成字符串,尤其是当你的模型或者数据处理流程需要字符串输入的时候。
先看你的代码和数据:你从pickle加载的preDF转成DataFrame后,所有列的数值都是numpy.int64类型(pandas加载pickle里的numpy数据时会保留原类型),这就是问题的根源。给你几个实用的解决办法:
办法1:提前把numpy整数转成Python原生整数
在把数据传给TensorFlow之前,先把整个DataFrame的numpy整数转成Python自带的int类型,这样就不会有类型冲突了:
# 遍历所有元素,把numpy.int64转成Python int df = df.applymap(lambda x: int(x) if isinstance(x, np.int64) else x)
要是只有个别列(比如你数据里的166列)需要处理,直接单独转就行:
df[166] = df[166].apply(int)
办法2:在TensorFlow数据管道里显式转类型
如果你是用tf.data.Dataset来构建数据管道,可以在预处理步骤里直接把numpy类型转成字符串(要是你的场景确实需要字符串输入的话):
import tensorflow as tf def preprocess_data(x): # 把numpy.int64转成TensorFlow的字符串类型 x_str = tf.strings.as_string(x) return x_str # 从DataFrame创建数据集并应用预处理 dataset = tf.data.Dataset.from_tensor_slices(df.values) dataset = dataset.map(preprocess_data)
办法3:检查是不是把数值特征当成字符串处理了
有时候这个错误是因为你不小心搞混了特征类型——比如你数据里的166列是0/1的标签,明明是数值型特征,却被当成字符串来处理了。如果是这种情况,根本不需要转字符串,只要确保模型输入层的类型和数据匹配就行:
# 比如输入层定义成接收int32类型,和你的数据类型对齐 input_layer = tf.keras.layers.Input(shape=(167,), dtype=tf.int32)
最后,你可以先跑一行代码确认一下DataFrame的列类型,看看是不是所有数值列都是numpy.int64:
print(df.dtypes)
这样就能精准定位需要处理的列啦!
内容的提问来源于stack exchange,提问作者Bussiere
相关产品推荐
相关产品推荐

