关于python:如何从列表中的数据集中删除所有零?

How do I remove all the zero's from a dataset that is in a list?

我在Excel电子表格中有这个数据集,我已经转换成一个csv文件供python阅读:

1
2
3
4
5
6
7
8
9
10
11
1   5   0   1   3   2   1   18  30  50  13  12  24  1
0   1   0   0   1   1   1   10  10  12  10  6   16  -1
0   7   0   0   4   4   1   21  30  46  19  11  25  1
0   1   0   0   1   1   1   2   4   3   4   2   5   -1
0   1   0   0   1   1   1   4   4   7   3   6   6   -1
0   1   0   0   1   1   1   3   3   3   3   3   4   -1
2   1   0   0   1   1   1   8   7   12  5   5   12  -1
2   5   0   0   2   2   1   24  20  45  14  12  28  -1
2   5   0   0   3   3   1   14  17  21  9   12  18  -1
0   5   0   0   2   2   1   17  12  25  8   13  19  1
23  25  0   22  13  12  11  112 125 240 39  27  165 1

因此,我需要一个python格式的输出文件,它以列表形式打印,而不使用0。换句话说,每一行或每一列都不应该有任何0。请看下面的示例格式。

1
2
3
4
5
6
7
8
9
+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1
-1 1:0.583333 2:-1 3:0.333333 4:-0.603774 5:1 6:-1 7:1 8:0.358779 9:-1 10:-0.483871 12:-1 13:1
+1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1
-1 1:0.458333 2:1 3:1 4:-0.358491 5:-0.374429 6:-1 7:-1 8:-0.480916 9:1 10:-0.935484 12:-0.333333 13:1
-1 1:0.875 2:-1 3:-0.333333 4:-0.509434 5:-0.347032 6:-1 7:1 8:-0.236641 9:1 10:-0.935484 11:-1 12:-0.333333 13:-1
-1 1:0.5 2:1 3:1 4:-0.509434 5:-0.767123 6:-1 7:-1 8:0.0534351 9:-1 10:-0.870968 11:-1 12:-1 13:1
+1 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5
+1 1:0.25 2:1 3:1 4:-0.698113 5:-0.484018 6:-1 7:1 8:0.0839695 9:1 10:-0.612903 12:-0.333333 13:1
+1 1:0.291667 2:1 3:1 4:-0.132075 5:-0.237443 6:-1 7:1 8:0.51145 9:-1 10:-0.612903 12:0.333333 13:1

编辑:

导入csvlist_new=[]

将open("testingseta.csv")作为csvfile:

1
2
3
4
5
 for row in csv.reader(csvfile):
     row.insert(0, row.pop())
     list_new.append(row)

 list_new.pop(0)

打印列表新建

他们自己没有零。这就是我目前为止所拥有的。请帮忙。谢谢您


猜猜你想干什么

  • 如果您想让第二个文件格式(按比例缩放的libsvm输入)不带零,而svm缩放不打印零值,则可以安全地执行此操作。唯一的缺点是文件太大。

  • 如果确实要从缩放的libsvm输入中删除零,请注意保留特征号,即1 1:0.5 2:0 3:-0.5将导致1 1:0.5 3:-0.5

  • 如果您想从第一个文件格式中删除零(未缩放的特征向量),这显然是错误的,因为缩放值可能与零不同。


insert(0,row.pop())实际上是将列表的最后一个元素移动到第一个元素,并将列表的其余部分右移。另外,list_new.pop(0)正在删除刚刚插入的元素。我建议您放置一些打印语句来查看您的代码在每个步骤中都在做什么:

1
2
3
4
5
6
7
8
9
10
11
12
import csv
list_new = []
with open('testingSeta.csv') as csvfile:
    for row in csv.reader(csvfile):
        print row
        row.insert(0, row.pop())
        print row
        list_new.append(row)
        print list_new
        list_new.pop(0)
        print list_new
print list_new

要删除列表行中出现的"0",可以执行以下操作:

1
2
3
4
5
6
7
8
9
10
import csv
list_new = []
with open('testingSeta.csv') as csvfile:
    for row in csv.reader(csvfile):
        print row
        while '0' in row: row.remove('0')
        print row
        list_new.append(row)
        print list_new
for row in list_new: print(row)