使用Python将CSV文件中特定列添加到另一个文件中
我来解释一下我的问题:
我有两个csv文件:
- project-table.csv(大约有50列)
- interaction-matrix.csv(大约有45列)
我想把project-table.csv中第43列的内容和interaction-matrix.csv中第1列的内容用一个点(.
)连接起来,形成一个新的字符串。
接下来,
- interaction-matrix.csv有一组表头。
- 它的第一列现在会是我刚才提到的那个新字符串。
- 其他所有的列只有0和1。
- 我需要从这个interaction-matrix.csv中提取出所有值为1的列,并把它们复制到一个新的csv文件中……(第一列要保留)
这是我写的代码……
我在keepcols
这一行遇到了错误……
import csv
reader=csv.reader(open("project-table.csv","r"))
writer=csv.writer(open("output.csv","w"),delimiter=" ")
for data in reader:
name1=data[1].strip()+'.'+data[43].strip()
writer.writerow((name1, None))
reader=csv.DictReader(open("interaction-matrix.csv","r"),[])
allrows = list(reader)
keepcols = [c for c in allrows[0] if all(r[c] != '0' for r in allrows)]
print keepcols
writer=csv.DictWriter(open("output1.csv","w"),fieldnames='keepcols',extrasaction='ignore')
writer.writerows(allrows)
这是我得到的错误信息:
Traceback (most recent call last):
File "prg1.py", line 23, in ?
keepcols = [c for c in allrows[0] if all([r[c] != '0' for r in allrows])]
NameError: name 'all' is not defined
project-table和interaction-matrix的第一列数据是一样的……所以我只是把project-table的第43列内容加到它自己的第1列上……
1 个回答
1
请编辑你的问题,告诉我们你遇到了什么错误信息。更新一下:NameError通常意味着你在使用一个较旧版本的Python(具体是哪个版本呢?)而这个版本没有all()
这个功能,或者是你把all
当成了一个变量名,并且没有展示你实际运行的代码。
注意:打开这两个文件的时候要用二进制模式,分别是“rb”和“wb”。
你说“我想把project-table.csv中col[43]的字符串和interaction-matrix.csv中col[1]的字符串用一个点(.)连接起来”,但是你实际上用的是project-table.csv中的col[2](而不是col[1]),而且在那个时候你并没有打开interaction-matrix.csv。