Я пытаюсь использовать 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
, которое также требует указания имен столбцов. Как мне это обойти?