【发布时间】:2021-04-18 21:56:05
【问题描述】:
我知道以前有人问过类似的问题,但建议的解决方案似乎都不适合我。我有以下Pandas 数据框:
| Title | Author | Target | Tag0 | Tag1 | Tag2 | Tag3 | Tag4 | Tag5 | Tag6 | Tag7 | Tag8 | Tag9 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Says Ron Johnson referred to "The Lego Movie" as an "insidious anti-business conspiracy." | 0 | 0 | 30 | 0 | 36 | 35 | nan | nan | nan | nan | nan | nan |
| 1 | "Forty percent of the Fortune 500 were started either by immigrants or children of immigrants." | 1 | 0 | 9 | 21 | 5 | 28 | nan | nan | nan | nan | nan | nan |
我通过Keras 中的TextVectorization 层对Title 属性进行了矢量化处理,获得了以下数据框:
| Title | Author | Target | Tag0 | Tag1 | Tag2 | Tag3 | Tag4 | Tag5 | Tag6 | Tag7 | Tag8 | Tag9 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | [9415, 19483, 9066, 16820, 20256, 6959, 6931,...,0 ] | 0 | 0 | 3213 | 3829 | 223 | 3140 | nan | nan | nan | nan | nan | nan |
我想将此 Pandas 数据框转换为 TensorFlow 数据集。我尝试使用以下代码来实现这一点:
dataset = tf.data.Dataset.from_tensor_slices((data.values, target.values))
这是我得到的错误:
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).
通过删除Title 列,错误消失,然后Title 是导致错误的列。 Title 看起来像这样:
print(data["Title"].values)
array([array([ 9415., 19483., 9066., 16820., 20256., 6959., 6931., 8539.,
10705., 1342., 1896., 4353., 14143., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0.],
...,
array([17497., 20189., 4280., 3460., 20256., 15754., 9178., 1114.,
19441., 18731., 13875., 14018., 5789., 6959., 8740., 13042.,
929., 9541., 773., 19384., 5659., 13042., 14578., 2813.,
17452., 888., 6206., 6959., 14540., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0.],
dtype=float32)], dtype=object)
我的问题是:Title 有什么问题?我应该改变什么?
我假设这与包含每个 numpy.ndarray 标题的 numpy.ndarray 的数据类型有关。正如上面dtype=object 所见。但我不太确定。
提前谢谢你!
编辑:
我找到了解决此问题的方法,只需将数据集转换为 Numpy ndarray。
# To numpy
numpy_dataset = data.to_numpy(dtype="<U43")
#Get Target
target = data.pop("Target")
#TF dataset
dataset = tf.data.Dataset.from_tensor_slices((numpy_dataset, target.values))
【问题讨论】:
-
Title列的每个单元格都是一个数组。values然后是一个数组数组。试试np.stack(data["Title"].values)。如果引发错误,则这些嵌套数组的形状不同,并且不能制成二维数值数组(tensorflow可以使用)。 -
很好,解决了我的问题但部分。正如您在上面的代码中看到的那样,我不仅传递了数据框
Titles。如果我按照您的建议进行操作,则会创建tf.data.Dataset.from_tensor_slices((np.stack(data["Title"].values), target.values))TensorFlow数据集。但是我怎样才能包含剩余的列呢?
标签: pandas dataframe numpy tensorflow tensorflow-datasets