Arrays 使用掩码数组创建数据帧

Arrays 使用掩码数组创建数据帧,arrays,numpy,pandas,Arrays,Numpy,Pandas,我认为我得到了以下行为b/c我的输入数组被屏蔽了,这让我很难理解。我一直在看,但不确定“哨兵”值是什么。在创建随后设置为空的数据帧期间使用的是“-9999”吗 制作数据帧时,处理这些值的好方法是什么?如果蒙版条目设置为空,我很高兴 下面是一个例子: [Dbg]>>> segDF = pd.DataFrame(segArrNew) Traceback (most recent call last): File "<interactive input>", line

我认为我得到了以下行为b/c我的输入数组被屏蔽了,这让我很难理解。我一直在看,但不确定“哨兵”值是什么。在创建随后设置为空的数据帧期间使用的是“-9999”吗

制作数据帧时,处理这些值的好方法是什么?如果蒙版条目设置为空,我很高兴

下面是一个例子:

[Dbg]>>> segDF = pd.DataFrame(segArrNew)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Anaconda\envs\esri\Lib\site-packages\pandas\core\frame.py", line 393, in __init__
    datacopy[mask] = NA
  File "C:\Python27\ArcGIS10.2\lib\site-packages\numpy\ma\core.py", line 3027, in __setitem__
    ndarray.__setitem__(_data, indx, dval)
IndexError: arrays used as indices must be of integer (or boolean) type

[Dbg]>>> segArrNew
masked_array(data = [(1, u'01', 1, --) (2, u'01', 2, --) (3, u'01', 3, --) ...,
 (56853, u'21', 241, --) (56854, u'21', 242, --) (56855, u'21', 243, --)],
             mask = [(False, False, False, True) (False, False, False, True)
 (False, False, False, True) ..., (False, False, False, True)
 (False, False, False, True) (False, False, False, True)],
       fill_value = (999999, u'N/A', 999999, u'N/A'),
            dtype = [('seg_id_nat', '<i4'), ('region', '<U255'), ('seg_id_reg', '<i4'), ('refGage', '<U30')])
我不确定这是“最好的”方法,但我使用
numpy.ma.filled()
函数()将屏蔽数组转换为常规
numpy.ndarray

[Dbg]>>np.ma.filled(segArrNew)
数组([(1,u'01',1,u'N/A'),(2,u'01',2,u'N/A'),(3,u'01',3,u'N/A'),
(56853,u'21',241,u'N/A'),(56854,u'21',242,u'N/A'),
(56855,u'21',243,u'N/A'),
数据类型=[('seg_id_nat','
[Dbg]>>> segArrNew2 = npFuncs.drop_fields(segArrNew, ['refGage'])
[Dbg]>>> segDF = pd.DataFrame(segArrNew2)
[Dbg]>>> segDF
<class 'pandas.core.frame.DataFrame'>
Int64Index: 57186 entries, 0 to 57185
Data columns:
seg_id_nat    57186  non-null values
region        57186  non-null values
seg_id_reg    57186  non-null values
dtypes: int64(2), object(1)
[Dbg]>>> np.ma.filled(segArrNew)
array([(1, u'01', 1, u'N/A'), (2, u'01', 2, u'N/A'), (3, u'01', 3, u'N/A'),
       ..., (56853, u'21', 241, u'N/A'), (56854, u'21', 242, u'N/A'),
       (56855, u'21', 243, u'N/A')], 
      dtype=[('seg_id_nat', '<i4'), ('region', '<U255'), ('seg_id_reg', '<i4'), ('refGage', '<U30')])

[Dbg]>>> df = pandas.DataFrame(numpy.ma.filled(segArrNew))
[Dbg]>>> df.ix[df['refGage'] == u'N/A'], 'refGage'] = ''