我是一个新的Python用户,如果问题看起来很愚蠢,请原谅我。
我有一个.csv格式的数据集,我需要从中创建一个二进制矩阵。它看起来像是:
A (events), B (group1), C (group2), D (group3)
1 isis al qaeda
2 al qaeda
3 boko h.
4 boko h. al shabaab isis
我想创建一个二进制矩阵(nxm),其中col A = n,m是B,C,D中包含的唯一元素的列表。因此,我的输出应该如下所示:
A (events), isis, al qaeda, boko h., al shabaab
1 1 1 0 0
2 0 1 0 0
3 0 0 1 0
4 1 0 1 1
矩阵内的元素是[0; 1]。在第一个数据集中为0时,对于事件A(i),未记录特定组,否则为1。
我不知道怎么做......你能帮助我吗?感谢
答案 0 :(得分:0)
首先需要读取所有数据并确定唯一条目集。有了这个,您可以创建要使用的列的排序列表。接下来,使用列表推导将数据的每一行写入输出CSV文件,以确定是否存在给定的列条目:
import csv
with open('input.csv', 'rb') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input)
data = list(csv_input)
unique = sorted(set(x for row in data for x in row[1:]))
with open('output.csv', 'wb') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow([header[0]] + unique)
for row in data:
csv_output.writerow([row[0]] + [1 if e in row[1:] else 0 for index, e in enumerate(unique)])
这假设您使用的是Python 2.x,并且您的输入CSV数据以逗号分隔。对于Python 3.x,您需要更改两行:
with open('input.csv', 'r', newline='') as f_input:
with open('output.csv', 'w', newline='') as f_output: