1

有没有办法将 numpy 屏蔽数组中的屏蔽值替换为 null 或 None 值?这是我尝试过但不起作用的方法。

for stars in range(length_masterlist_final):
    ....
    star = customSimbad.query_object(star_names[stars])
        #obtain stellar info.
        photometry_dataframe.iloc[stars,0] = star_IDs[stars]
        photometry_dataframe.iloc[stars,1] = star_names[stars]

        photometry_dataframe.iloc[stars,2] = star['FLUX_U'][0]
        #Replace "--" masked values with a Null (i.e., '') value.
        photometry_dataframe.iloc[stars,2] = ma.filled(photometry_dataframe.iloc[stars,2], fill_value=None)
.....
photometry_dataframe.to_csv(output_dir + "simbad_photometry.csv", index=False, header=True, na_rep='NaN')

具体来说

(photometry_dataframe.iloc[stars,2] = ma.filled(photometry_dataframe.iloc[stars,2], fill_value=None)) 

生产

'MaskedConstant' object has no attribute '_fill_value'

当我将数据帧输出为 csv 文件时,我想用 '' 替换掩码值 '--'。一种解决方法是将输出的 csv 文件读回 python 并将 '--' 替换为 '',但这是一个可怕的解决方案。必须有更好的解决方案。我不希望在 csv 文件中将掩码值打印为“--”。

4

1 回答 1

3

使用天体:

>>> from pandas import DataFrame
>>> from astropy.table import Table
>>> import numpy as np
>>> 
>>> df = DataFrame()
>>> df['a'] = [1, np.nan, 2]
>>> df['b'] = [3, 4, np.nan]
>>> df
    a   b
0   1   3
1 NaN   4
2   2 NaN
>>> t = Table.from_pandas(df)
>>> t
<Table masked=True length=3>
   a       b   
float64 float64
------- -------
    1.0     3.0
     --     4.0
    2.0      --
>>> t.write('photometry.csv', format='ascii.csv')
>>> 
(astropy)neptune$ cat photometry.csv 
a,b
1.0,3.0
,4.0
2.0,

fill_values您可以使用参数 ( http://docs.astropy.org/en/stable/io/ascii/write.html#parameters-for-write )指定从表值到输出值的任意转换。

于 2016-01-27T02:16:32.460 回答