Интересно, как я могу заменить определенные значения при загрузке данных из данного (CSV) файла с несколькими столбцами, комбинируя как строки, так и числовые значения.
В следующем примере предположим, что у вас есть несколько географических положений с известными широтами и долготами и определенным набором свойств (P1-P5) и классом (просто для включения строкового компонента задачи). Есть некоторые пропущенные значения, которые должным образом заменены на genfromtxt (в данном случае пропущенное значение равно -999), а также есть значения, которые не являются правильными (поддельные или другие типы флагов), такие как 0.0 , Как мы можем заменить 0,0 до -999?
Данные:
Name,lat,long,P1,P2,P3,P4,P5,Class
id1,71.234,10.123,0.0,11,212,222,1920,A
id2,72.234,11.111,,,312,342,1920,A
id3,77.832,12.111,1,0.0,,333,4520,B
id4,77.987,12.345,3,0.0,,231,2020,B
id5,77.111,13.099,5,11,212,222,1920,A
И код пока:
dfile = "data.csv"
missing_value = -999
import numpy as np
data = np.genfromtxt(dfile, unpack=True, comments='#', names=True,
autostrip='Yes', filling_values=missing_value,
dtype=('S5', 'float', 'float', 'float', 'float', 'float', 'float', 'S1')
, delimiter=',',
)
new_data = np.where(data!=0.0 ,data, -999)
Я использовал np.where (data! = 0.0, data, -999), но я получил ошибку: TypeError: invalid type promotion
Я не знаю, что мне не хватает ...
ps 1. Возможно, это решаемо с Pandas, но я ищу независимое решение
ps 2. Я знаю, что грязным обходным решением было бы установить неправильные значения (0,0 с) как мой отсутствующий флаг в исходном файле, но что есть несколько значений, которые мы хотели бы исключить? (или объединение данных с разными флагами)