Как преобразовать числовой массив с числовыми и нечисловыми записями во все числа с плавающей точкой - PullRequest
0 голосов
/ 21 сентября 2018

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

array = np.array(['1', '2', '3', 'string'])
array.astype(np.float64)

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

ValueError: could not convert string to float: 'string'

Я бы хотел, чтобы вывод выглядел так:

np.array([1.0, 2.0, 3.0, 'string'])

Я тоже пробовал pd.is_numeric (), но не могу понять.Это выполнимо, или это нарушает правила numpy массивов?

1 Ответ

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

Ваш желаемый результат невозможен, поскольку np.arrays может иметь только один тип данных (обычно это один из числовых типов, например, float, int, ...) ... если вы не выберете универсальный тип dtype=object, но тогда вы теряете все эти прелести (то есть вся оптимизация, работающая с числовыми значениями).Так почему вы хотите это сделать?

Если это действительно то, что вы хотите, попробуйте это:

array = np.array(['1', '2', '3', 'string'])

def safe_float(x):
    try:
        x = float(x)
    except:
        pass
    return x

array = np.array(list(map(safe_float, array)), dtype=object)
print(array)

array([1.0, 2.0, 3.0, 'string'], dtype=object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...