Весь список строк в массиве с плавающей точкой - PullRequest
0 голосов
/ 28 февраля 2019

Я читаю CSV-файл из панд, где у меня есть столбец (3,3) в форме списков.Пример списка следующий:

[[45.70345721, -0.00014686, -1.679e-05], [-0.00012219, 45.70271889, 0.00012527], [-1.161e-05, 0.00013083, 45.70306778]]

Я попытался преобразовать этот список в массив numpy float с помощью np.array(arr).astype(np.float).Но он выдает следующую ошибку:

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

Когда я искал основную причину, я заметил, что этот список полностью записан в строкуформат.print [i for i in arr] дает следующее, где все является строкой.

['[', '[', '4', '5', '.', '7', '0', '3', '4', '5', '7', '2', '1', ',', ' ', '-', '0', '.', '0', '0', '0', '1', '4', '6', '8', '6', ',', ' ', '-', '1', '.', '6', '7', '9', 'e', '-', '0', '5', ']', ',', ' ', '[', '-', '0', '.', '0', '0', '0', '1', '2', '2', '1', '9', ',', ' ', '4', '5', '.', '7', '0', '2', '7', '1', '8', '8', '9', ',', ' ', '0', '.', '0', '0', '0', '1', '2', '5', '2', '7', ']', ',', ' ', '[', '-', '1', '.', '1', '6', '1', 'e', '-', '0', '5', ',', ' ', '0', '.', '0', '0', '0', '1', '3', '0', '8', '3', ',', ' ', '4', '5', '.', '7', '0', '3', '0', '6', '7', '7', '8', ']', ']']

Как мне преобразовать этот список в массив с плавающей точкой?

РЕДАКТИРОВАТЬ

Вот снимок части моего фрейма данных.enter image description here

При загрузке фрейм данных имеет следующий формат.df Вот небольшой пример фрейма данных.

df = pd.DataFrame(columns=["e_total"], data=[[['[', '[', '4', '5', '.', '7', '0', '3', '4', '5', '7', '2', '1', ',', ' ', '-', '0', '.', '0', '0', '0', '1', '4', '6', '8', '6', ',', ' ', '-', '1', '.', '6', '7', '9', 'e', '-', '0', '5', ']', ',', ' ', '[', '-', '0', '.', '0', '0', '0', '1', '2', '2', '1', '9', ',', ' ', '4', '5', '.', '7', '0', '2', '7', '1', '8', '8', '9', ',', ' ', '0', '.', '0', '0', '0', '1', '2', '5', '2', '7', ']', ',', ' ', '[', '-', '1', '.', '1', '6', '1', 'e', '-', '0', '5', ',', ' ', '0', '.', '0', '0', '0', '1', '3', '0', '8', '3', ',', ' ', '4', '5', '.', '7', '0', '3', '0', '6', '7', '7', '8', ']', ']']]])

Может кто-нибудь попробовать и помочь мне преобразовать его в массив с плавающей точкой.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

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

То, что вы указали в качестве «примера», неверно.Вы перечисляете результат своего заявления на печать и понимание списка.То, что хранится как запись для этого столбца, является строкой.

вы сможете просто взять каждый элемент и обернуть его в eval

eval(arr) 

, который должен вернуть вам список питонов shape (3,3).Оттуда вы можете при необходимости преобразовать его в простой массив и изменить типы.

0 голосов
/ 28 февраля 2019

Разве числа в списках не плавают?Если это так, то просто составив список, np.array сделает то, что вы просите.Вам нужно только сделать

np.array (список)

, если числа на самом деле являются строками, подобными тем, что вы видите во второй части, вам нужно будет просмотреть список и преобразовать каждое число индивидуальноиспользуя либо гнездовой цикл, либо понимание вложенного списка.

цикл выглядит следующим образом

для i в списке:

for j in i:

    j= np.float(j)

понимание списка выглядит как

new_list = [[np.float (j) для j в i] для i в списке]

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