Importe varios archivos CSV de diferentes carpetas, actualice el valor y guarde el archivo CSV con diferentes nombresTengo alrededor de 95 archivos csv con diferentes nombres de columna guardados en la carpeta de datos principal y 95 subcarpetas diferentes como \ data \ dataset1 \ dataset1.csv, \ data \ dataset2 \ dataset2.csv, etc. Las columnas id1 e id2 son variables comunes en todos los archivos. Quiero hacer lo siguiente:
- Importe los 95 archivos csv a JMP (usando JMP Pro 16)
- Actualice un valor basado en una condición en los 95 archivos: si (id1 = 'a001' entonces id2 = 'b001')
- Guarde los archivos csv actualizados con diferentes nombres en las carpetas respectivas
La primera fila es el título del archivo y no se puede eliminar. Los nombres de columna / variable comienzan en la fila 2 y los datos en la fila 3.
Me las arreglé para importar todos los archivos por:
dt: Importación de varios archivos (
<< Establecer carpeta (
"C: \ Datos \"
),
<< Establecer Mostrar oculto (0),
<< Establecer subcarpetas (1),
<< Establecer filtro de nombre ("* .csv"),
<< Establecer habilitación de nombre (1),
<< Establecer filtro de tamaño ({522, 2096152}),
<< Establecer tamaño habilitado (0),
<< Establecer filtro de fecha ({3715322235, 3718948571}),
<< Establecer fecha Habilitar (0),
<< Establecer la columna Agregar nombre de archivo (0),
<< Establecer la columna Agregar tamaño de archivo (0),
<< Establecer la columna Agregar fecha de archivo (0),
<< Establecer el modo de importación ("CSVData"),
<< Establecer conjunto de caracteres ("Mejor conjetura"),
<< Establecer el modo de pila ("Tabla por archivo"),
<< Establecer CSV tiene encabezados (1),
<< Establecer CSV Permitir numérico (1),
<< Establecer CSV Primera línea de encabezado (2),
<< Establecer el número CSV de líneas de encabezado (1),
<< Establecer CSV Primera línea de datos (3),
<< Establecer CSV EOF Coma (1),
<< Establecer pestaña CSV EOF (0),
<< Establecer CSV EOF Space (0),
<< Establecer espacios CSV EOF (0),
<< Establecer CSV EOF Otro (""),
<< Establecer CSV EOL CRLF (1),
<< Establecer CSV EOL CR (1),
<< Establecer CSV EOL LF (1),
<< Establecer CSV EOL Semicolon (0),
<< Establecer CSV EOL Otro (""),
<< Establecer cotización CSV ("\!" "),
<< Establecer CSV Escape (""),
<< Establecer método XML ("adivinar"),
<< Establecer XML Guess ("enorme"),
<< Establecer configuración XML (Configuración XML ()),
<< Establecer el método JSON ("adivinar"),
<< Establecer JSON Guess ("enorme"),
<< Establecer la configuración de JSON (Configuración de JSON ()),
<< Establecer devolución de llamada de importación (vacío ())
) << Importar datos;
En este código, no hay una fórmula que indique dónde comienzan los nombres de las columnas y los datos.
Luego, intenté actualizar un valor usando:
dt: subjid <<
: id1 << Establecer fórmula (
Si (: id2 == "a001",: id1 == "b001")
);
Como resultado, los valores anteriores a "a001" en la columna id1 se eliminan y el valor id1 de "a001" no se actualiza.
Estoy en stock en esta fase y ni siquiera puedo pensar en la siguiente etapa para guardar archivos con diferentes nombres en sus respectivas carpetas. Cualquier ayuda / orientación es muy apreciada.
Gracias
Tabla de datosVentanasRe: importar varios archivos CSV de diferentes carpetas, actualizar el valor y guardar CSV con diferentes nombresNo estoy seguro de lo que hizo su JSL:
dt: subjid << :id1 << Set Formula( If( :id2 == "a001", :id1 == "b001") )
El operador << "enviar" solo debe aparecer una vez, y la columna a la que está agregando la fórmula debe estar en el lado izquierdo. Luego, en la instrucción if, debe haber una condición, seguida de un valor para el caso verdadero y otro valor para el caso falso. Algo como esto
dt << New Column( "likes",
"character",
formula( If(
Is Missing( name ), // first test
"unknown", // if first test is true
name == "KATIE", // second test
"cats", // if second test is true
"dogs" // if second test is false
)
)
);
que está destinado a crear una nueva columna de fórmula de gatos o perros según el valor en el nombre de la columna. Si el nombre está en blanco (falta), "desconocido".
O, si su objetivo es sobrescribir una (s) columna (s) existente (s) en función de los valores de otras columnas, quizás un bucle explícito sería mejor que una columna de fórmula:
foreachrow(dt,
if(
name == "DANNY", // a test with ==
name = "Dani"; // an assignment with =
sex = "F";
, /* else if */ name == "ROBERT",
name = "Roberta";
sex = "F";
);
);
( Si secretos puede ayudar a comprender las comas y los puntos y comas. ) Eso deja las filas sin cambios, a menos que el nombre coincida.
Observe en qué se diferencian los dos ejemplos:
El primer ejemplo debe producir una respuesta en el if (...) que se asignará a la columna de la fórmula. Si la columna no debe modificarse para esa fila, el valor de la fórmula debe ser el valor original de la fila.Editar: lo siento, eso está mal. Solo asegúrese de que la columna de fórmula produzca un valor para cada fila.
El segundo ejemplo solo actualiza las filas y columnas que elige.
Dado que planea escribir un archivo CSV (no guardar un archivo JMP), la expresión de fórmula que agregue a una columna no se guardará (aunque los valores actualizados de la fórmula sí lo serán). Creo que podría querer algo más como el segundo ejemplo.
Re: importar varios archivos CSV de diferentes carpetas, actualizar el valor y guardar CSV con diferentes nombresGracias Craige. Como mencionaste, el segundo ejemplo funcionó bien. Sin embargo, solo funcionó si abro o importo un csv, pero no funcionó cuando importé varios CSV. Además, ¿podría guiarme para que también logre la última etapa de volver a escribir csv en sus respectivas carpetas con diferentes nombres de archivo?
Gracias,
Helal
Re: importar varios archivos CSV de diferentes carpetas, actualizar el valor y guardar CSV con diferentes nombresGracias, hice una publicación porque parece generalmente útil y algunas de ellas no son realmente obvias cómo hacerlo.
MFI Update CSV
Re: importar varios archivos CSV de diferentes carpetas, actualizar el valor y guardar CSV con diferentes nombresGracias de nuevo. Esto es asombroso.
Helal