La unión de tabla con el archivo .csv da como resultado campos nulos después de la unión

8

Similar a las preguntas ya hechas sobre archivos .dbf, estoy tratando de unir archivos .csv a una cobertura .gdb o shapefile en QGIS. Las tablas que se agregaron a QGIS antes de la unión se ven bien, pero una vez completada la unión, la tabla amalgamada tiene valores NULL para todos los campos unidos. Lo mismo sucede con una variedad de tablas diferentes, independientemente de si me estoy uniendo a un archivo shapefile o un archivo .gdb.

Estoy ejecutando QGIS 2.0.1 en un OSX 10.8.5. Los archivos de la tabla original están contenidos en formato .mdb, así que compré y usé el visor MDB ACCDB para exportarlos a .CSV. El hecho de que estén bien cuando se ven por separado me hace creer que el problema está en el procedimiento de unión, no en el Tablas en sí.

Sugerencias?

KMT
fuente
Relacionado con [enlace] ( gis.stackexchange.com/questions/63804/… )
KMT
¿Puede verificar que la columna en el csv sea del mismo tipo que la columna a la que se está uniendo en el archivo de forma / gdb de destino? Por lo general, puede ver los tipos de campo en la ventana de propiedades de cada capa yendo a la pestaña Campos .
SaultDon
1
Ajá: el archivo de forma tiene un campo entero, mientras que todos los campos de la tabla son campos de cadena. ¿La conversión de .mdb a .csv habría perdido los tipos de campo? ¿Puedo cambiar el tipo de campo en el cuadro de diálogo de propiedades?
KMT
Asegúrese de verificar si tiene coincidencias exactas. Tuve este problema incluso cuando los tipos de campo coinciden. Resulta que el problema era que tenía un espacio en blanco en mis cadenas. Esto se solucionó creando un nuevo campo utilizando la trim(oldField)funcionalidad QGIS .
Lauren

Respuestas:

2

Los archivos .csv en QGIS importan por defecto todos los datos como cadenas. Debe crear un archivo de texto .csvt que indique a QGIS qué columnas deben especificarse y qué tipos de datos.

A .csvt file contains only one line and the types for each column have to be quoted and comma separated, e.g.

"Integer","Real","String"

Citado de: http://anitagraser.com/2011/03/07/how-to-specify-data-types-of-csv-columns-for-use-in-qgis/

Entonces sus datos serán del mismo tipo, y la unión debería funcionar.

Amos Budde
fuente
Gracias @Amos Budde, también intentaré la ruta .csvt, pero resultó que probé un shapefile y una tabla diferentes, ambos con campos de cadena, y aún no funciona: obtengo valores nulos en la tabla unida . Mis datos se comparten arriba: ¿hay alguna posibilidad de que lo pruebes?
KMT
Acabo de probar con un archivo .csvt y todavía no tuve suerte. ¿Funciona para ti?
KMT
2

Es mejor si se asegura de que los dos campos tengan el mismo tipo de datos.

El tipo de campo no se puede cambiar para los archivos de forma. Pero es fácil crear un nuevo campo de texto vacío y hacer que sea igual al campo entero.

Puede usar una expresión de calculadora de campo que se parezca a: tostring( "INT_FIELD" )y simplemente reemplace INT_FIELDcon el nombre del campo entero real.

También puede cambiar fácilmente un valor de atributo de capa CSV del número de texto <-> .


ACTUALIZAR

Si está obteniendo valores nulos, puede intentar mantener la unión, pero simplemente cierre y vuelva a abrir esa tabla de atributos para ver si los valores unidos están allí (o incluso cerrar / volver a abrir QGIS).

He podido unir con éxito un csv a un shapefile con una combinación de tipos de campo, por lo que string vs integer no debería ser el problema.


ACTUALIZACIÓN 2

Parece que para deshacerse de los valores nulos, tienen que tener un registro coincidente en la tabla correspondiente desde la que se realizan las uniones. Pero en la imagen a continuación, puede ver que algunos tienen un registro coincidente:

se une con éxito en amarillo

SaultDon
fuente
Ok, incluso cuando ambos son valores de cadena, tengo el problema de los valores NULL en la tabla unida. ¿Otros pensamientos?
KMT
No hubo suerte al cerrar / abrir la tabla de atributos o QGIS.
KMT
@KMT ¿Tiene algún dato que pueda compartir para que cualquiera pueda probarlo?
SaultDon
Por supuesto. Shapefile en dropbox.com/sh/jvbh2pafm2dreec/lr0GiFiq2t (usando el archivo "Delta Covers"). Tabla en dropbox.com/sh/qw25uxmaoo6pgqh/s8EKrU9DfL (usando la tabla "Covers_Survey"). También tenga un archivo .gdb (igual que el archivo shape) en dropbox.com/sh/8vdalc68jjd2c7i/iFpsm7MgAD . Unirse según los campos "Covlnk_text" (shapefile) y "Covlnktxt" (tabla).
KMT
1
@KMT No creo que la conversión de tipos de datos de campo ayude en absoluto porque los valores aún no coinciden. Volvería a los datos de origen (el mdb) y compararía los valores en el csv de salida con la tabla mdb (tal vez de alguna manera se equivocaron). LibreOffice Base también puede abrir un mdb.
SaultDon