试图删除Python 3中的特定列

时间:2015-03-31 17:06:49

标签: python csv

我是一个编写我的第一个生产计划的蟒蛇noobie。我的项目的要点是我尝试导入CSV,将其分成几行不同的CSV文件(行10-100000转到文件1,100001-200000转到文件2等)并且在某些时候我想删除指定的列(特别是列5-400,当除以3时,余数为1,但我稍后会添加该位)。现在,我只想删除第一行。

import csv
import itertools
import ctypes

signals = open('EPcathBIO_FILTERED.csv')
csv_sig = csv.reader(signals)

csv_head = open('EPcathBIO_HEAD.csv', 'w', newline='')
cs_writer = csv.writer(csv_head, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
for row in itertools.islice(csv_sig, 180):
    print(row)
    cs_writer.writerow(row)   
csv_head.close()

csv_body = open('EPcathBIO_BODY.csv', 'w', newline='')
cs_writer = csv.writer(csv_body, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
for row in csv_sig: # itertools.islice(csv_sig, 0, 182): #restrict to start of body to the end
    cs_writer.writerow(row)

for E in csv_body:
    del E[1]
csv_body.close()  

signals.close()

但我一直收到以下错误:

Traceback (most recent call last):
  File "C:\Users\Benjamin\Documents\JPH Lab\Data\2015_02_10_19_51_55\processor.py", line 22, in <module>
for E in csv_body:
io.UnsupportedOperation: not readable

感谢您的帮助和耐心!

1 个答案:

答案 0 :(得分:0)

您在csv_body(写入)模式下打开了w。这意味着您只能向其写入数据,您无法从中读取数据。由于您无法从中读取数据,因此您无法对其进行迭代。您需要以rw(读/写)模式打开它。您还需要通过搜索将其倒回到文件的开头。

但即使你这样做,csv_body只是一个文本文件,它也不知道如何删除这样的元素。

此外,在您的示例中,csv_headcsv_body都从第0行到第180行。我假设您希望csv_head最多为180,csv_body为是180和更高。

你应该真的使用pandas包。你的整个脚本都是这样的(假设你要头到180结束,身体从180开始):

import pandas as pd

signals = pd.read_csv('EPcathBIO_FILTERED.csv')
signals.iloc[180:].to_csv('EPcathBIO_HEAD.csv')
signals.iloc[:180, 1:].to_csv('EPcathBIO_BODY.csv')