Hola,
Quiero eliminar todas las columnas que contienen "manzana" y eliminar todas las filas (independientemente de las columnas) con un valor específico -9999. Comencé el código para eliminar la columna pero no lo entiendo.
Gracias.
dt = Open("file.csv");
//dt = Open( "$SAMPLE_DATA/Cities.jmp" );
col_list = dt << get column names( string );
For( i = N Items( col_list ), i > 0, i--,
If(Contains( col_list[i], "apple" ),
Remove From( col_list, i ),
)
);
//dt << Select Where( );
//dt << Delete Rows;
dt << save( "testOUT.txt" );Es un cambio muy simple en el guión.Todas las opciones especiales para el ingreso de datos, pueden ser eliminadas.La función Open() solo usará los valores predeterminados.
En segundo lugar, todo lo que se debe hacer con las supresiones de fila es buscar un valor de cadena de "-9999" cuando se determina que la columna de entrada es de naturaleza de carácter.
los nombres predeterminados son Aquí (1);
dt=Abrir(
"archivo (3).csv");
// Crear una lista para colocar las columnas que se eliminarán
delLista = {};
Para( i = 1, i<= N Cols(dt), i++,
Si ( Contiene ( Mayúsculas ( como Columna ( i ) << obtener nombre ), "MANZANA" ) > 0,
insert into(delList, column(i)< )
);
dt << borrar columnas( delList);
// Recorra los datos y elimine las filas que tengan
// el valor -9999 en cualquiera de las columnas
Para( i = 1, i <= N Cols( dt ), i++,
If( Columna( dt, i ) << obtener tipo de datos == "Numérico",
dt << seleccione donde (como columna (dt, i) == -9999),
dt << select where( Contiene( Como columna( dt, i ), "-9999" ) == 1 |
Contiene (como columna (dt, i), "99") == 1
)
);
Si ( N filas ( dt << obtener filas seleccionadas ) > 0,
dt << eliminar filas
);
);
Jim,
El código funciona.
Cuando uso el "|" tubo. Creará columna(s) adicional(es).
No quiero ningún encabezado de columna adicional en este caso, serán "12" columnas en total.
Pero en cada columna, puedo tener varios datos de tuberías. Solo me importa el primer valor e ignoro el resto.
Ejemplo:
"99|23|abc|x", solo me importa "99" e ignoro el resto.
"-9999|123", solo me importa "-9999" y esa fila se eliminará más tarde.
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 -9999|999|231 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1|xyz|abc 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 -9999 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 99|23|abc|x 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
-9999|123 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1|87 1 -9999 2 30 40 1 10 99
Aquí hay un script que hará lo que quieras.Un par de puntos sobre el guión:
1. La función Abrir() tiene el "|" agregado como delimitador además del ",".Esto se creó fácilmente usando la "Vista previa de datos" al abrir el archivo .csv.Permitió la selección de caracteres adicionales para ser utilizados como delimitadores.Luego, todo lo que se debe hacer es abrir el archivo y luego ir a la entrada Fuente en el Panel de tablas, editarlo y copiar el código fuente que JMP creó para abrir el archivo.
2. La Eliminación de las columnas que contenían Apple tuvo que generalizarse, ya que en una columna se deletreaba Apple y en otra columna se deletreaba apple.
3. Realmente no creo que deba eliminar una fila completa, en función de encontrar una ocurrencia de -9999.Realmente creo que deberías establecer el valor -9999 en un valor faltante.Incluí un fragmento de código que puede manejar sus datos de esa manera, si lo desea.
names default to Here(1);
dt=Open(
"file.csv",
columns(
New Column( "a", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "b", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "c", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "d", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "e", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "g", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "apple", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "orange", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "candy", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "pizza", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Apple2_2", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "orange2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( "|" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// Create a list to place columns to be deleted into
delList = {};
For( i = 1, i<= N Cols(dt), i++,
If( Contains( Uppercase( as Column( i ) << get name ), "APPLE" ) > 0,
insert into(delList, column(i)<<GET name=""> 0,
dt << delete rows
);
)
);
/*// Substitute the code below for the last For Loop in the above
// script, if what you want to do is to just change the -9999
// values to missing values
For( i = 1, i <= N Cols( dt ), i++,
If( Column( dt, i ) << get datatype == "Numeric",
dt << select where( As Column( dt, i ) == -9999 );
If( N Rows(dt << get selected rows) > 0,
column(dt,i)[dt << get selected rows] = .;
);
)
);*/</GET>