Ошибка чтения CSV-файлов в тензорном потоке с помощью экспериментального.make_csv_dataset - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь использовать tf.data.experimental.make_csv_dataset для чтения набора больших файлов csv. Я особенно использую его, потому что pandas.read_csv постоянно выдает ошибки памяти, поэтому tenorflow намного быстрее читает мои файлы. Мой код чтения выглядит так:

url_list = ["file_1.csv", "file_2.csv", ... "file_20.csv"]
batch_size = 40000

train_dataset = tf.data.experimental.make_csv_dataset(
    url_list,
    batch_size,
    label_name = "Outcome",
    shuffle = False,
    num_epochs = 1)

Проблема в том, что у меня есть столбец «Сумма», которому присваивается int32 dtype на основе чтения первой строки. Это проблема c, потому что некоторые более поздние значения равны 2000000000 и должны храниться как int64. Как указать, что столбец «Сумма» следует интерпретировать как int64? Я попытался преобразовать их после прочтения файлов, используя tf.cast:

for feature, label in train_dataset:
    tf.cast(feature["Amount"],tf.int64)

, но я получаю эту ошибку: InvalidArgumentError: Field 6 in record is not a valid int32: 2123456789

Я знаю column_names и column_default аргументы для tf.experimental.make_csv_dataset, однако у меня слишком много столбцов. Поэтому указывать их и назначать «dtype» было бы очень утомительно. У меня также есть комбинация строк, чисел с плавающей запятой и целых чисел, поэтому tf.experimental.make_csv_dataset более удобно для предварительной обработки данных, чем использование tf.data.experimental.CsvDataset, которое также требует указания имен столбцов. Как мне это обойти?

...