Python 从Pandas数据帧中获取字符串列到TensorFLow模型的最佳方法是什么?
假设我有一些包含一些字符串列的数据帧:Python 从Pandas数据帧中获取字符串列到TensorFLow模型的最佳方法是什么?,python,pandas,tensorflow,categorical-data,one-hot-encoding,Python,Pandas,Tensorflow,Categorical Data,One Hot Encoding,假设我有一些包含一些字符串列的数据帧: Animal Name Age ... Cat Fluffy 2 ... Dog Denton 3 ... 我想把动物列(带有一组已知的值)输入到我的训练模型中(用于线性回归)。我查看了以下选项: tf.feature\u column.categorical\u column\u与词汇表\u list一起使用,但随后它似乎与tf.feature\u column.make\u parse\u example\u
Animal Name Age ...
Cat Fluffy 2 ...
Dog Denton 3 ...
我想把动物列(带有一组已知的值)输入到我的训练模型中(用于线性回归)。我查看了以下选项:
tf.feature\u column.categorical\u column\u与词汇表\u list
一起使用,但随后它似乎与tf.feature\u column.make\u parse\u example\u spec
和协议缓冲区一起使用tf.one\u hot
听起来可能有帮助,但示例代码确实没有帮助我理解或者我应该自己写一些东西来将字符串转换成数字/布尔数据吗?您可以使用
tf.feature\u column.input\u layer
函数来创建输入张量。首先,分类列必须包装为指示符或嵌入列
例如:
# Create columns
vocab_list = ['a','b','c','d']
letter_column = tf.feature_column.categorical_column_with_vocabulary_list(
key="letter",
vocabulary_list=vocab_list)
embedded_column = tf.feature_column.embedding_column(letter_column, 8)
indicator_column = tf.feature_column.indicator_column(letter_column)
# Create features and use input_layer to get a tensor
features = {'letter': ['c']}
inp = tf.feature_column.input_layer(features,[embedded_column, indicator_column])
# Print value of inp
with tf.Session() as s:
s.run([tf.global_variables_initializer(),
tf.local_variables_initializer(),
tf.tables_initializer()])
print(s.run(inp))
输出(前8个数字可能有所不同):
inp
是一个包含12个元素的张量。前8个是根据embedded\u列
(可培训)计算的嵌入,后4个是indicator\u列
值的多热表示 可以忽略tf.feature\u列名称空间,如下所示:
使用熊猫自动将字符串列编码为数值。原始数据框中的类别列将具有属性cat.codes。您可以创建一个新的pandas列并将这些cat.code复制到其中。新列将是一个数字列,并填充神经网络所需的数字
使用如下代码查找类别列,并创建新列:
str_cols = [cn for cn in d.columns if is_string_dtype(d[cn])]
add_code_columns = [cn for cn in d.columns if (cn in cat_cols) and (cn in str_cols)]
for cn in add_code_columns:
codecolname = cn + "_code"
if not codecolname in d.columns:
d[codecolname] = d[cn].cat.codes
str_cols = [cn for cn in d.columns if is_string_dtype(d[cn])]
add_code_columns = [cn for cn in d.columns if (cn in cat_cols) and (cn in str_cols)]
for cn in add_code_columns:
codecolname = cn + "_code"
if not codecolname in d.columns:
d[codecolname] = d[cn].cat.codes