【发布时间】:2017-01-16 00:23:13
【问题描述】:
我正在尝试对 CSV 文件(例如 myfile.csv)执行 case/if-else 语句来分析列,然后在新 csv 中创建新列(例如 myfile_new.csv)。
源数据(myfile.csv)如下所示:
unique_id,variable1,variable2
1,,C
2,1,
3,,A
4,,B
5,1,
我正在尝试做两个转换:
- 对于第二个字段,如果输入文件的字段中有数据,则为1,否则为0。
- 第三个字段被展平为三个字段。如果输入文件的第三个字段有
A,则第三个输出字段有1,否则0;B和C以及输出文件中的第四个/第五个字段也是如此。
我希望结果 (myfile_new.csv) 看起来像这样:
unique_id,variable1,variable2_A,variable2_B,variable2_C
1,0,0,0,1
2,1,0,0,0
3,0,1,0,0
4,0,0,1,0
5,1,0,0,0
我正在尝试在SQL 中做同样的事情
select unique_id,
case when len(variable1)>0 then 1 else 0 as variable1,
case when variable2 = 'A' then 1 else 0 end as variable2_A,
case when variable2 = 'B' then 1 else 0 end as variable2_B,
case when variable2 = 'C' then 1 else 0 end as variable2_C, ...
我对任何内容都持开放态度,但 CSV 文件大小为 500GB - 1TB,因此它需要使用该大小的文件。
【问题讨论】:
-
我不明白输出中的第 4 列和第 5 列来自哪里以及您所说的“虚拟变量”是什么意思。
-
虚拟变量意味着将分类变量展平为数值变量。鉴于第一行的变量 2 有一个“C” --> variable2_A 为 0,variable2_B 为 0,variable2_C = 1。