将Pandas数据帧转换为Tensorflow数据

2024-05-15 14:33:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Pandas数据帧转换为Tensorflow数据集。数据帧包括三列:

  1. 目标-二进制[1/0]
  2. 功能1-整数列表。在
  3. 功能2-整数列表。在

Feature1和Feature2是基于Tensorflow的TokenTextEncoder的索引列表。第一行示例如下:

目标功能1功能2 1[1,2,3,5][6,7,9,10]

目标是创建基于两个特征集的二进制分类。在

我已经尝试过将列表转换为numpy数组,但是仍然得到相同的错误。在

target = df.pop('Target')
dataset = tf.data.Dataset.from_tensor_slices((df.values, target.values))

TypeError:应为二进制或unicode字符串,得到[399、309、34、383、281]


Tags: 数据功能示例target目标pandasdf列表
1条回答
网友
1楼 · 发布于 2024-05-15 14:33:13

正如@VGR所提到的,Matcher的实例将只搜索最初给定的字符串。如果要搜索新字符串,则必须创建Matcher的新实例。在您的情况下,下一次搜索将从上次匹配后的索引开始。例如:

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
int start = 0;
while (matcher.find(start)) {
    text = text + text.substring(matcher.start(), matcher.end());
    start = matcher.end();
    matcher = pattern.matcher(text);
}

如果您还没有意识到,那么您应该知道text = text + subString创建了一个全新的String对象,然后将其分配给原始的text变量。这意味着,尽管text引用了“更新的”文本,matcher只知道在创建matcherString引用的text对象。这就是为什么对于您的用例,您必须为每个循环创建一个新的Matcher实例


可选地,您可以考虑使用{A1},以避免每次迭代创建一个全新的字符串(Matter)的开销。不过,您仍然需要跟踪start索引,因为每次迭代都需要重置Matcher对象,以便它识别StringBuilder对象的更新/更长的内部结束索引(即附加文本)。例如:

StringBuilder stringBuilder = new StringBuilder(text);
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(stringBuilder);
int start = 0;
while (matcher.find(start)) {
    stringBuilder.append(stringBuilder, matcher.start(), matcher.end());
    start = matcher.end();
    matcher.reset();
}
text = stringBuilder.toString();

最后,一定要小心。除非您在正则表达式中有一些非常时髦的魔力(这完全是另一个问题),否则如果在文本中找到至少一个模式实例,那么这段代码将永远循环。我建议您在while循环上添加一个附加条件或某种计数器

相关问题 更多 >