Не удается преобразовать типы данных столбца данных

1

После обработки большого набора данных с использованием Pandas/Dask я сохранил результирующий фрейм данных в файл csv.

Когда я пытаюсь прочитать выходной CSV с использованием Dask, по умолчанию все типы данных являются объектами. Всякий раз, когда я пытаюсь преобразовать их, используя обычные методы (например, определение типов данных при чтении или переназначении их после чтения), я продолжаю получать ошибки в отношении преобразования, как показано ниже:

# ATTEMPT 1

import dask.dataframe as dd
header = ['colA', 'colB', ...]
dtypes = {'colA' : 'float', ...}
df = dd.read_csv('file.csv', names=header, dtype=types)

> TypeError: Cannot cast array from dtype('O') to dtype('float64') according to the rule 'safe'
> ...
> ValueError: could not convert string to float: 'colA'

-----------------------------------------------------------------------------------

# ATTEMPT 2

import dask.dataframe as dd
header = ['colA', 'colB', ...]
df = dd.read_csv('file.csv', names=header)
df['colA'] = df['colA'].astype(str).astype(float)

> ...
> File "/home/routar/anaconda3/lib/python3.6/site-packages/pandas/core/dtypes/cast.py", line 730, in astype_nansafe
> ValueError: could not convert string to float: 'colA'

Все атрибуты в исходном фрейме данных (до преобразования в CSV) являются ints/float, поэтому преобразование на 100% возможно. Я также уверен, что значения действительны.

Я предполагаю, что это имеет какое-то отношение к безопасной политике Python в отношении конверсий данных.

Есть ли обходной путь для этого или любого способа принудительного преобразования?

  • 1
    Ваш CSV уже содержит заголовки?
  • 0
    @mad_ Это так. Уже исправили.
Теги:
pandas
type-conversion
dask
data-conversion

1 ответ

1
Лучший ответ

Когда вы читаете dataframe из csv, используя name names=header, вы получаете имена столбцов в первой строке вашего фрейма.

Вот почему вы получаете ошибку

ValueError: не удалось преобразовать строку в float: 'colA'

Потому что colA - это первое значение вашего столбца.

Поэтому просто добавьте header=0 param в read_csv (чтобы явно использовать первую строку как имена столбцов), чтобы исправить проблему:

df = dd.read_csv('file.csv', names=header, dtype=types, header=0)
  • 0
    Lol сообщение об ошибке привело меня к мысли, что проблема заключается в столбце «colA» вместо фактического значения «colA». Типы теперь в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню