如何从列表中的数据集中删除所有零?
Posted
技术标签:
【中文标题】如何从列表中的数据集中删除所有零?【英文标题】:How do I remove all the zero's from a dataset that is in a list? 【发布时间】:2015-03-05 15:05:20 【问题描述】:我在一个 Excel 电子表格中有这个数据集,我已经转换成一个 csv 文件供 python 读取:
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 的列表中打印。换句话说,每一行或每一列都不应该有任何零。请看下面应该打印的示例格式。
+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
编辑:
导入 csv list_new = []
用 open('testingSeta.csv') 作为 csvfile:
for row in csv.reader(csvfile):
row.insert(0, row.pop())
list_new.append(row)
list_new.pop(0)
打印列表_新
它们本身没有零。这就是我到目前为止所拥有的。请帮忙。谢谢你
【问题讨论】:
如何从输入到输出?它们看起来与我完全无关。 那是什么类型的输出?只是一个纯原始字符串?二维列表? 有一个名为 csv "import csv" 的 python 输入模块,它使 python 能够读取电子表格。这是我的代码 atm: import csv list_new = [] with open('testingSeta.csv') as csvfile: for row in csv.reader(csvfile): row.insert(0, row.pop()) list_new.append(行) list_new.pop(0) 打印 list_new 发挥我的想象力我认为“输入”实际上是在 excel 中打开 csv 文件时数据的外观(因为我看不到任何逗号)以及实际数据为导入到 python 它显示数字是浮点数而不是整数? 如何正确复制我的python代码? 【参考方案1】:只是猜测你想做什么
如果您想获得不带零的第二种文件格式(缩放的 libsvm 输入) - 虽然 svm-scale 不打印零值,但这样做是安全的。唯一的缺点是文件较大。
如果您确实从缩放的 libsvm 输入中删除了零,请注意保留功能编号 i。 e. 1 1:0.5 2:0 3:-0.5
将导致 1 1:0.5 3:-0.5
如果您想从第一个文件格式(未缩放的特征向量)中删除零 - 这是完全错误的,因为缩放的值可能与零不同。
【讨论】:
【参考方案2】:row.insert(0, row.pop()) 实际上是将列表的最后一个元素移动到第一个元素,并将列表的其余部分向右移动。 list_new.pop(0) 也正在删除您刚刚插入的元素。 我建议你放一些打印语句来看看你的代码在每一步都在做什么:
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”,您可以这样做:
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)
【讨论】:
感谢您的回复。但是我想简单明了的是如何从列表中的列表中删除零。谢谢 我已经编辑了答案,可能会解决您的问题 解决方案完美运行。谢谢,非常感谢。你能帮忙在一个列表中分离一个列表,以便它逐行显示每个列表吗? 这是我运行程序时打印的内容。 [['1', '1', '5', '1', '3', '2', '1', '18', '30', '50', '13', '12', '24'], ['-1', '1', '1', '1', '1', '10', '10', '12', '10', '6', '16' ],['1','7','4','4','1','21','30','46','19','11','25'],[' -1','1','1','1','1','2','4','3','4','2','5'],['-1' , '1', '1', '1', '1', '4', '4', '7', '3', '6', '6'], ['-1', '1' ', '1', '1', '1', '3', '3', '3', '3', '3', '4'], ['-1', '2', ' 1'、'1'、'1'、'1'、'8'、'7'、'12'、'5'、'5'、'12'] 我已编辑代码以一次打印一行。以上是关于如何从列表中的数据集中删除所有零?的主要内容,如果未能解决你的问题,请参考以下文章