4 votos

¿Cómo puedo usar Python para editar un campo en una tabla de atributos?

Tengo unas cuantas tablas de datos llenas de información sobre los pozos de inyección de agua salada, con volúmenes de inyección dados mensualmente. Necesito sumar estos valores mensuales para obtener un valor anual para cada pozo para utilizar en mi mapa. Debido al gran número de pozos (unos 1100 por tabla de datos), preferiría hacer esto usando un código Python en lugar de hacerlo a mano.

¿Cómo haría para poblar el nuevo campo de AnnualVolumes con valores calculados de otro campo?

Estoy usando ArcMap 10.3.

1voto

Dan Puntos 99

Si estás buscando una solución dentro de esri, entonces te recomiendo que uses la calculadora de campo. tutorial . Si los datos están en forma de tablas, entonces sería mejor usar Excel o algún equivalente de código abierto y reimportar las tablas después de haber discutido los datos. Ambas son opciones que resolverán su problema. Lo que intentas hacer con los cálculos finales y la forma de los conjuntos de datos dictará la herramienta.

1voto

ESV Puntos 4591

Ya que viene como parte de la instalación estándar de pitón en ArcGIS Desktop 10.4 vale la pena mirar Pandas . Usaré algunos datos que tomé de Datos sobre las lluvias y el nivel de los ríos de Melbourne páginas. Los datos en bruto están en esta esencia para aquellos que quieran seguirlo.

Primero leeré los datos del CSV. Si tus datos no están en un CSV hay muchas otras maneras de leer los datos.

>>> import pandas as pd
>>> river_data = pd.read_csv("river_outflow.csv", parse_dates=["date"])
>>> print river_data.head()
     station       date   mm
0  Footscray 2015-08-03  0.2
1  Footscray 2015-03-15  0.0
2  Footscray 2015-03-22  1.6
3  Footscray 2015-03-29  0.8
4  Footscray 2015-05-04  0.0

El parse_dates me permite analizar automáticamente la cadena de fechas en el CSV como un objeto de fecha en pandas. Como el campo de fecha es ahora un campo de fecha y hora, puedo agrupar por año, mes o día, junto con otros atributos.

>>> print river_data.date.dt.month.head()
0    8
1    3
2    3
3    3
4    5
Name: date, dtype: int64

>>> aggregate = river_data.groupby(["station", river_data.date.dt.year]).sum()
>>> print aggregate
                      mm
station    date         
Footscray  2015    279.6
           2016     37.8
Mornington 2015  16925.0
           2016    223.0

O si quiero usar los años como columnas puedo hacer una tabla pivotante:

>>> aggregate = river_data.pivot_table("mm", "station", river_data.date.dt.year)
>>> print aggregate
date              2015   2016
station                      
Footscray     6.502326    4.2
Mornington  528.906250  223.0

Y luego puedo exportar los resultados a un archivo:

>>> aggregate.to_csv("aggregate.csv")

En ese momento es sencillo unirse por el nombre espacial a mi clase de características en ArcMap.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X