设置 JSON Panda Split 的列数据类型我正在使用 JSL 导入采用 Panda Split 格式的 JSON 文件。当我这样做时,所有列都以字符形式导入,而实际上它们应该是字符和数字的组合。我可以编写一个 JSL 脚本将每个列转换为数字,但这也会转换字符列(并删除其数据)。
使用 JSL,我可以检测数据类型应该是字符还是数字并进行相应的转换吗?或者有没有办法在导入步骤中执行此操作?我事先不知道特定文件的列。
JMP 18.1.1
dt_cols = dt << Get Column Names();
For Each({col, i}, dt_cols,
Try(
// No warning, just converts everything.
As Column(dt, col) << Data Type("Numeric");
As Column(dt, col) << Modeling Type( "Continuous" );
);
);数据访问视窗回复:设置 JSON Panda Split 的列数据类型我没有合适的例子来测试这一点(JMP 刚刚与我快速获得的 JSON 示例崩溃)所以我无法测试是否有办法在 JSON 向导中做到这一点。
您可以通过首先检查列中的值来转换数值,然后进行相应的转换。
执行转换的一种方法是先检查列中的一些值,如果它们没问题,则进行转换。您可以检查以下几个选项
- 只检查第一个值
- 检查第一个值和最后一个值
- 检查所有值
- 检查值的随机子集
现在我会使用 Num(< 更改列的数据类型。我认为您也可以使用 InFormat() 来检查“最佳”匹配(可能比 Num() 更好)。
回复:设置 JSON Panda Split 的列数据类型是的,这可行。谢谢 Jarmo。
回复:设置 JSON Panda Split 的列数据类型以下是一个供参考的 JSL 实现:
rows_to_check_for_conversion = 100;
// Get column names.
dt_cols = dt << Get Column Names();
// Change data types.
For Each( {c, i}, dt_cols,
non_missing_rows = dt << Get Rows Where( !Is Missing( As Column( dt, c ) ) );
row_check = 0;
convert_to_number = 1;
While( row_check < rows_to_check_for_conversion & row_check < N Items( non_missing_rows ) & convert_to_number == 1,
row_check = row_check + 1;
r = non_missing_rows[row_check];
val = Num( dt:c[r] );
If( Is Missing( val ),
convert_to_number = 0
);
);
If( convert_to_number == 1,
As Column( dt, c ) << Data Type( "Numeric" );
As Column( dt, c ) << Modeling Type( "Continuous" );
);
);回复:设置 JSON Panda Split 的列数据类型一些可能需要做的改变:使用 Column() 而不是 As Column(),并检查是否要在 Num() 调用中添加 << Restrict(我已经为我的版本做了类似的事情)。