Преобразование numy ndarray с dtype <U30 в float - PullRequest
0 голосов
/ 11 сентября 2018

Я читаю список из ячейки данных панд.

>>from pandas import DataFrame as table
>>x = table.loc[table['person'] == int(123), table.columns != 'xyz']['segment'][0]
>>print("X = ",x)

, где «персона» и «сегмент» - это имена моих столбцов, а сегмент содержит список с плавающими значениями.

>>X = [[39.414, 39.498000000000005]]

Теперь, когда я пытаюсь преобразовать это в numpyмассив,

>>x = numpy.asarray(x)
>>x=x.astype(float)

Я получаю следующую ошибку

ValueError: could not convert string to float: '[[39.414, 39.498000000000005]]'

Я попытался проанализировать строку и попытался удалить любые "\ n" или "" или любые ненужные кавычки, но этоне работает.Затем я попытался найти dtype

>>print("Dtype = ", x.dtype)
>>Dtype = <U30

Я предполагаю, что нам нужно преобразовать d-тип U30 в числа с плавающей точкой, но я не уверен, как это сделать.Я использую NumPy версии 1.15.0.

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

Ответы [ 2 ]

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

Для конкретного формата, который вы видите, рассмотрите np.fromstring. Вы также можете удалить неиспользуемое измерение с помощью нарезки строк:

x = '[[39.414, 39.498000000000005]]'

res = np.fromstring(x[2:-2], sep=',')

# array([ 39.414,  39.498])
0 голосов
/ 11 сентября 2018

Тип данных должен был вас предупредить. U30 здесь обозначает юникодную строку длиной 30 (что вы увидите, если наберете len(x).

То, что у вас есть, это строковое представление списка, а не список строк / чисел с плавающей запятой / и т.д ..

Вам необходимо использовать библиотеку ast здесь:

x = '[[39.414, 39.498000000000005]]'
x = ast.literal_eval(x)
np.array(x, dtype=float)

array([[39.414, 39.498]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...