I am converting a Feature class to a numpy array, to a pandas dataframe in order to peform some grouping and basic statistics (to determine percent of totals on Shape_Area). This is all working as expected and generating the desired result.
I need to publish this out as a GP service and for some reason it fails (no errors) to convert the grouped dataframe to_json(). It seems to "print" correctly in the python IDE,
[{"Landuse":"Dikes and Levees","pctOfTotal":0.84,"acreTotal":17.88},{"Landuse":"Fallow Cropland","pctOfTotal":98.5,"acreTotal":2094.91},{"Landuse":"Mixed Wetland Hardwoods","pctOfTotal":0.66,"acreTotal":14.01}]
but when output to arcpy.AddMessage it seems to print the dataframe instead of the JSON,
" Landuse pctOfTotal acreTotal\n0 Dikes and Levees 0.84 17.88\n1 Fallow Cropland 98.50 2094.91\n2 Mixed Wetland Hardwoods 0.66 14.01"
Full implementation:
narr <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>FeatureClassToNumPyArray<SPAN class="punctuation token">(</SPAN>clip_fc<SPAN class="punctuation token">,</SPAN> flds<SPAN class="punctuation token">)</SPAN>
df <SPAN class="operator token">=</SPAN> pd<SPAN class="punctuation token">.</SPAN>DataFrame<SPAN class="punctuation token">(</SPAN>narr<SPAN class="punctuation token">,</SPAN> columns<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Landuse'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">'Shape_Area'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
grouped <SPAN class="operator token">=</SPAN> df<SPAN class="punctuation token">.</SPAN>groupby<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Landuse'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape_Area'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>sum<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>reset_index<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
grouped<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'pctOfTotal'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>grouped<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape_Area'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">/</SPAN> grouped<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape_Area'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>sum<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">*</SPAN> <SPAN class="number token">100</SPAN>
grouped<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'acreTotal'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> grouped<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'Shape_Area'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">/</SPAN> <SPAN class="number token">43560</SPAN>
outJson <SPAN class="operator token">=</SPAN> grouped<SPAN class="punctuation token">.</SPAN>to_json<SPAN class="punctuation token">(</SPAN>orient<SPAN class="operator token">=</SPAN><SPAN class="string token">'records'</SPAN><SPAN class="punctuation token">,</SPAN> default_handler <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> outJson <SPAN class="comment token">#correctly formats as desired JSON</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN>outJson<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token">#incorrectly displays it as a dataframe, not JSON</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>SetParameter<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> outJson<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token">#incorrectly outputs it as a dataframe, not JSON</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>