Python: преобразовать список строк в число с плавающей запятой с пустым / нет - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть a = ['1','2','','17']

Я хотел бы применить к нему операцию min / max. Я не могу использовать pandas / numpy.

. Однако я конвертирую его в число с плавающей точкой, но не могу преобразовать '' в число с плавающей точкой с помощью функции float (). То же самое происходит, если у меня есть None, а не ''.

Я никогда не сталкивался с этой проблемой в Matlab, поэтому я потерял с python.

Я могу преобразовать его в число с плавающей точкой с [float(i) for i in var if i], но мне нужно сохранить тот же размер, чтобы работать с индексом позже. Этот метод удалит пустые строки, это не то, что я хочу, мне нужно значение (очевидно, не None), которое я мог бы применить к нему среднее / max / min et c

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете определить функцию, которая пытается преобразовать значения в числа с плавающей запятой и, если это невозможно, возвращает None, а затем использовать списочные выражения для создания преобразованных и отфильтрованных версий списка, которые вы можете использовать min / max / ... независимо от того, что оригинал не поврежден.

def try_float(v):
   try:
       return float(v)
   except Exception:
       return None

# Original:
a = ['1', '2', '', '17', None, 'purple', -7, 0]

# Containing floats and Nones:
floaty_a = [try_float(item) for item in a]

# Filter out the Nones:
filtered_a = [item for item in floaty_a if item is not None]

# Compute min/max:
print(min(filtered_a))
print(max(filtered_a))
...