отсутствует значение '--' при чтении файла netCDF

при чтении файла NetCDF я сохраняю данные столбца воды в кадре данных, чтобы прочитать его снова. В кадре данных я получаю отсутствующие значения --, которые также могут быть известны как «замаскированные» значения. Я попытался заменить их, используя filedata.replace('--','nan'), но он заменяет даже поплавки, и я получаю весь фрейм данных с помощью nan. Также pd.dropna() не работал. Что было бы хорошим способом либо избежать этих значений при чтении netcdf, либо заменить их в кадре данных на nans, не затрагивая числа с плавающей запятой? Вот пример части моего фрейма данных:

so_1    so_2    so_3
--  --  --
--  --  --
--  --  --
--  --  --
31.99   32.09   32.22
--  --  --
--  --  --
--  --  --
--  --  --
32.08   32.15   32.18
32.0871 32.11   32.17
--  --  --

Заранее спасибо!


person Behnam    schedule 28.08.2018    source источник


Ответы (2)


Вы можете использовать numpy NaN (вам придется импортировать numpy как np)

    df.replace('--', np.nan)
Out[20]: 
       so_1   so_2   so_3
0       NaN    NaN    NaN
1       NaN    NaN    NaN
2       NaN    NaN    NaN
3       NaN    NaN    NaN
4     31.99  32.09  32.22
5       NaN    NaN    NaN
6       NaN    NaN    NaN
7       NaN    NaN    NaN
8       NaN    NaN    NaN
9     32.08  32.15  32.18
10  32.0871  32.11  32.17
11      NaN    NaN    NaN
person Andrew    schedule 28.08.2018
comment
Спасибо @Andrew, я нашел более практичный способ и объяснил ниже - person Behnam; 29.08.2018
comment
Ваше решение имеет смысл, но я не понимаю, как оно более практично. Не могли бы вы уточнить это? - person Andrew; 29.08.2018
comment
по неизвестной причине python не так просто заменяет «--» на nan. Я не мог найти почему, но, по крайней мере, в случае файлов netCDF значения «--» являются замаскированными значениями, с которыми работать катастрофически. Таким образом, использование df.mask() работает намного лучше и действительно заменяет те замаскированные значения, которые не заменяются с помощью обычной команды замены. - person Behnam; 14.10.2018

Я нашел более практичный ответ на свой вопрос: использование df.mask работает потрясающе. pandas или numpy знают '--' как строку и по неизвестным причинам заменяют не только их, но и все на nan. Я обнаружил, что это не строка, такая как '--', но я должен представить, что это замаскированное значение, такое как --, которое не является строкой. Затем следующая команда заменит их на nan:

df_m=df.mask(df=='--', other=nan)

посмотрите здесь: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html

person Behnam    schedule 29.08.2018