Не удается преобразовать типы данных столбца данных - PullRequest
0 голосов
/ 19 сентября 2018

После обработки большого набора данных с помощью 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) - целые числа / числа с плавающей запятой, поэтому конвертация возможна на 100%.Я также уверен, что значения действительны.

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

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

1 Ответ

0 голосов
/ 19 сентября 2018

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

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

ValueError: не удалось преобразовать строку в число с плавающей точкой: 'colA'

Поскольку colA является первым значениемвашего столбца.

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

df = dd.read_csv('file.csv', names=header, dtype=types, header=0)
...