我有一个CSV文件,我想从中提取列,但只从一些行中提取。看起来像这样:
gene_id, ENSDARG00000104632, gene_version, 2, gene_name, RERG
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186
基本上我想要第2列和第6列,但只从第5列中有“gene_name”的行中。所以我想摘录:
^{pr2}$(从那里开始有成千上万排)
我写的是:
import csv
with open('filename.csv', 'rb') as infh:
reader = csv.reader(infh)
for row in reader:
if row[4] == 'gene_name':
print row[1, 5]
但是,它给了我一个错误:
File "./gene_name_grabber.sh", line 10, in
if row[4] == 'gene_name':
IndexError: list index out of range
我明白这个错误意味着我要求它查看一个大于行中索引数的索引数……但显然每行中有4个以上的索引。请帮忙?在
谢谢!在
我喜欢Python。但最自然的表达方式是
让我们回到python。这不是你想写的:
^{pr2}$将其改为
print(row[1], row[5])
。在有些行只有少量列。因此,您需要将
row[4]
或row[5]
的取消引用包装在一个if
语句中,以验证它是否足够长:显然,有些行没有包含足够的列。试试这个:
…输出:
正如锑指出的,听起来好像您的数据中偶尔会丢失一些值,而csv无法轻松处理这些值。我建议使用像pandas这样的库,它有一个
read_csv
函数,可以处理丢失的值。以这些数据为例:其内容如下:
^{pr2}$屈服:
如你所愿。在
但是,如果缺少数据(如本例中所示),则只需删除以下行:
哪些输出:
(但是,这可能不是您想要的。)
参考文献
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
相关问题 更多 >
编程相关推荐