在python中读写csv-大-大
我有一个12288+1列的csv,我想把它减少到4096+1列 在这个12288+1列中,每三个列上的值相同,最后一个值是位0或1 我需要保持最后一个值,对于重复的三人组只取1 我原来的csv有300行,或者行,随便什么。我不知道如何捕获其他行,而我的脚本只占用第一行/行 从原始csv 3,3,3,5,5,5,7,7,7,10,10,10 ... 20,20,20,50,50,50,1 想要最终的csv吗 3,5,7,10 ... 20,50,1在python中读写csv-大-大,python,csv,rows,Python,Csv,Rows,我有一个12288+1列的csv,我想把它减少到4096+1列 在这个12288+1列中,每三个列上的值相同,最后一个值是位0或1 我需要保持最后一个值,对于重复的三人组只取1 我原来的csv有300行,或者行,随便什么。我不知道如何捕获其他行,而我的脚本只占用第一行/行 从原始csv 3,3,3,5,5,5,7,7,7,10,10,10 ... 20,20,20,50,50,50,1 想要最终的csv吗 3,5,7,10 ... 20,50,1 import csv count, num =
import csv
count, num = 0
a = ''
with open('data.csv','rb') as filecsv:
reader = csv.reader(filecsv)
for row in reader:
while count < 12290:
a = a + str(row[:][count])+','
count = count + 3
num = num + 1
print num
print a
导入csv
计数,num=0
a=''
将open('data.csv','rb')作为filecsv:
reader=csv.reader(filecsv)
对于读取器中的行:
当计数小于12290时:
a=a+str(第[:]行[计数])+','
计数=计数+3
num=num+1
打印数
打印
这只是为了有个想法
感谢您的帮助如果您不介意使用图书馆,Pandas将能够很好地为您提供帮助 您可以使用pandas.read\u csv读取csv。 use_cols参数指定要保留哪些列,因此可以使用该参数忽略这些重复的列
columns = list(range(1,12288,3))
columns.append(12288)
data = pandas.read_csv('data.csv', usecols=columns)
data.to_csv('new_data.csv')
如果他们总是三人一组,就扔掉两人 分成3组,如下所示:
>>> row=range(9)
>>> [row[i:i+3] for i in range(0,len(row),3)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
但是,如果行
不是3的倍数,则这将在末尾提供小于3的组:
>>> row=range(11)
>>> [row[i:i+3] for i in range(0,len(row),3)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]
^ ^ only two elements...
如果元素的数量可能不是3的倍数,请使用zip。它将删除不完整的r、g、b组:
>>> row=range(11)
>>> zip(*[iter(row)]*3)
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
然后将其拆成r、g、b组件:
import csv
with open('data.csv','rb') as filecsv:
reader = csv.reader(filecsv)
for row in reader:
for r, g, b in [row[i:i+3] for i in range(0,len(row),3)]:
# use r or g or b, ignore the other two
如果您得到的是ValueError
数据集不是3的倍数(或者csv没有正确解析数据),请尝试使用zip
,如下所述:
import csv
with open('data.csv','rb') as filecsv:
reader = csv.reader(filecsv)
for row in reader:
for r, g, b in zip(*[iter(row)]*3):
# use r or g or b, ignore the other two
(未测试…要删除连续的重复项,可以使用: 它读取输入csv文件并将其写入输出csv文件,同时删除连续的重复项 如果行的最末端可能存在相邻的重复项
0
,1
,则仅删除行[:-1]
(除最后一列外的所有列)中的重复项,并将最后一位行[-1]
附加到结果中(如果要保留):
from itertools import islice
no_dups = map(itemgetter(0), groupby(islice(row, len(row)-1)))
no_dups.append(row[-1])
writer.writerow(no_dups)
这总是3人一组吗?是否有2个(或4个)的组需要保留多个相同的值?同一个值是否会出现多次,如果是,您会保留这两个值吗?我很难理解这个问题。您想从一行中获取前12990个值,删除重复项,然后将其减少到4097个值?对不起,我的解释很糟糕。基本上,我有我的原始csv,总是在一个序列3重复元素,但我只需要1。最后一个,或者位置12289是1或0,我也需要这个。这3个元素的序列是RGB颜色,我对灰色进行了转换,所以现在,这总是一样的,所以我想丢弃2,只捕获1。我有一个csv,其中300行(300张图片)用于12288(64x64像素)的RGB格式,所以现在,我想用4096+1(64x64像素的灰度)+1列我的位0或1如何维护这些列(0,3,6,9,12,15,…,12285,12288,12289)?我不明白…
只是错误
没有多大帮助。这是否是一个ValueError
可能?如果是这样,请使用zip方法…哦,是的。最后一组不是3个元素,只是我唯一的列bite 0或1。@MarkAngel11:与答案相关:@dawg:我这样做了。现在只是个问题。在新csv中写入r ou g或b时,没有特征线('\n')。唯一行中的每个元素…@MarkAngel11:只需在适当的位置添加\n
。可能在包含r,g,b
的循环之后的行的循环之后。听起来像是在用r,g,b
在循环中添加\n
,以便在每个元素之后添加它。。。
from itertools import islice
no_dups = map(itemgetter(0), groupby(islice(row, len(row)-1)))
no_dups.append(row[-1])
writer.writerow(no_dups)