Преобразование из Pandas dataframe в тензорный объект TensorFlow

Я все еще новичок в Python, Machine Learning и TensorFlow, но прилагаю все усилия, чтобы прыгать прямо в голову. Я мог бы использовать некоторую помощь, хотя.

Мои данные в настоящее время находятся в фрейме Pandas. Как я могу преобразовать это в объект TensorFlow? Я пробовал

dataVar_tensor = tf.constant(dataVar)
depth_tensor = tf.constant(depth)

Но я получаю ошибки [15780 rows x 9 columns] - got shape [15780, 9], but wanted [].

Я уверен, что это, вероятно, простой вопрос, но я действительно могу воспользоваться помощью.

Большое спасибо

пс. Я запускаю shadoworflow 0.12 с Anaconda Python 3.5 в Windows 10

Ответ 1

Я думаю, что у меня это получилось!: D

Я преобразовал свой фреймворк Pandas в массив Numpy, используя .as_matrix()

Теперь, используя

dataVar_tensor = tf.constant(dataVar, dtype = tf.float32, shape=[15780,9])
depth_tensor = tf.constant(depth, 'float32',shape=[15780,1])

похоже, работает. Я не могу сказать, что это окончательно, потому что у меня есть другие препятствия для преодоления, чтобы заставить мой код работать, но, надеюсь, шаг в правильном направлении. Спасибо за вашу помощь.

В стороне, мои испытания получения учебника для работы над моими собственными данными продолжаются в следующем вопросе Преобразование учебника TensorFlow для работы с моими собственными данными

Ответ 2

Следующие функции легко основаны на входных данных массива numpy:

import tensorflow as tf
import numpy as np
a = np.array([1,2,3])
with tf.Session() as sess:
    tf.global_variables_initializer().run()

    dataVar = tf.constant(a)
    print(dataVar.eval())

-> [1 2 3]

Не забудьте запустить session и run() или eval() ваш тензорный объект, чтобы увидеть его содержимое; иначе он просто даст вам общее описание.

Я подозреваю, что, поскольку ваши данные находятся в DataFrame, а не просто массиве, вам нужно поэкспериментировать с параметром shape tf.constant(), который вы в настоящее время не указали, чтобы помочь ему понять размерность DataFrame и обработать его индексы и т.д.?

Ответ 3

Вот одно решение, которое я нашел, что работает на Google Colab, вероятно, должно работать на локальной машине тоже

import pandas as pd
import tensorflow as tf
#Read the file to a pandas object
data=pd.read_csv('filedir')
#convert the pandas object to a tensor
data=tf.convert_to_tensor(data)
type(data)

Это должно напечатать что-то вроде

tensorflow.python.framework.ops.Tensor

Надеюсь это поможет :)

'

Ответ 4

hottbox.pdtools.utils (инструменты интеграции Pandas API HOTTBOX) предоставляет функции

   pd_to_tensor(df[, keep_index])
   tensor_to_pd(tensor[, col_name])

для конвертации в обоих направлениях.

Ответ 5

Вы можете использовать tf.estimator.inputs.pandas_input_fn в вашей функции make_input_fn(X, y, num_epochs). Однако мне не удалось заставить его работать с мультииндексом. Я исправил эту проблему, превратив ее в стандартный целочисленный индекс, используя df.reset_index(drop=True)

Ответ 6

Вы можете преобразовать столбец dataframe в тензорный объект следующим образом:

tf.constant((df['column_name']))

Это должно вернуть вам тензорную переменную, которая выглядит примерно так:

<tf.Tensor: id=275634, shape=(48895,), dtype=float64, numpy=
array([1, 2, ...])>

Кроме того, вы можете рекламировать любое количество столбцов данных, как хотите:

tf.constant(([cdf['column1'], cdf['column2']]))

Надеюсь, это поможет.