在Python中,使用ma numpy中的fiil_值将屏蔽值(--)替换为Null或None值

在Python中,使用ma numpy中的fiil_值将屏蔽值(--)替换为Null或None值,python,numpy,pandas,dataframe,astropy,Python,Numpy,Pandas,Dataframe,Astropy,有没有办法将numpy掩码数组中的掩码值替换为空值或无值?这是我尝试过的,但不起作用 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]

有没有办法将numpy掩码数组中的掩码值替换为空值或无值?这是我尝试过的,但不起作用

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文件中打印为“---”。

使用Astropy:

>>> 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,
>>从熊猫导入数据帧
>>>从astropy.table导入表
>>>将numpy作为np导入
>>> 
>>>df=数据帧()
>>>df['a']=[1,np.nan,2]
>>>df['b']=[3,4,np.nan]
>>>df
a b
0   1   3
1南4
2南
>>>t=表。来自_熊猫(df)
>>>t
a b
浮动64浮动64
------- -------
1.0     3.0
--     4.0
2.0      --
>>>t.write('photometry.csv',format='ascii.csv')
>>> 
(天文)海王星$cat测光.csv
a、 b
1.0,3.0
,4.0
2.0,

您可以使用
fill\u values
参数()指定从表格值到输出值的任意转换。

什么是
photometry\u dataframe.iloc[stars,2]
filled
的第一个参数应该是numpy数组,或者更好的是
numpy
屏蔽数组。错误表明情况并非如此。光度测量数据帧。iloc[stars,2]是一个熊猫数据帧,初始化为:光度测量数据帧=pd.dataframe(索引=星星ID,列=列名称)。从外观上看,fill_值只接受数值。例如,fill_value=0将屏蔽值替换为0。我想要的是一个空值,而不是“---”。对于
numpy
掩码数组,
“--”
不是填充。它是打印字符串中的占位符。如果对象是
dataframe
,则使用
pandas
方法对其进行格式化和/或填充。如何使用pandas精确填充?print(type(photometry_dataframe))表示photometry_dataframe是pandas数据帧(pandas.core.frame.dataframe)。我确实尝试过,例如,如果光度测量数据框.iloc[stars,2]==”--“:光度测量数据框.iloc[stars,2]=”#将缺少的值指示器“-”替换为“”。但这不起作用。我没有发布解决方案,我提供了@hpaulj的解决方案链接。如果这真的解决了你的问题,你可以删除这个问题(基本上是重复的),并在链接上投票解决方案。我尝试了这个,但它对我不起作用。我得到了以下错误:TypeError:Unhable type:“MaskedConstant”您使用的是什么版本的Numpy?我使用的是Numpy版本1.10.2和什么版本的astropy?astropy版本是1.1.2