如何在处理CSV数据时忽略第一行数据?

2024-04-26 00:20:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我要求Python打印CSV数据列中的最小值,但是最上面的行是列号,我不希望Python考虑最上面的行。如何确保Python忽略第一行?

这是目前为止的代码:

import csv

with open('all16.csv', 'rb') as inf:
    incsv = csv.reader(inf)
    column = 1                
    datatype = float          
    data = (datatype(column) for row in incsv)   
    least_value = min(data)

print least_value

你能解释一下你在做什么,而不仅仅是给出代码吗?我对Python很陌生,我想确保我理解所有内容。


Tags: csv数据代码importdatavaluewithcolumn
3条回答

您可以使用csv模块的^{}类的实例来推导CSV文件的格式,并检测头行是否与内置的next()函数一起存在,以便仅在必要时跳过第一行:

import csv

with open('all16.csv', 'r', newline='') as file:
    has_header = csv.Sniffer().has_header(file.read(1024))
    file.seek(0)  # Rewind.
    reader = csv.reader(file)
    if has_header:
        next(reader)  # Skip header row.
    column = 1
    datatype = float
    data = (datatype(row[column]) for row in reader)
    least_value = min(data)

print(least_value)

因为在您的示例中datatypecolumn是硬编码的,所以处理row的速度会稍快一些,如下所示:

    data = (float(row[1]) for row in reader)

注意:以上代码适用于Python 3.x。对于Python 2.x,请使用以下行打开文件,而不是显示:

with open('all16.csv', 'rb') as file:

要跳过第一行,请拨打:

next(inf)

Python中的文件是行上的迭代器。

通常使用next(incsv)将迭代器向前推进一行,这样就跳过了头。另一个(比如你想跳过30行)是:

from itertools import islice
for row in islice(incsv, 30, None):
    # process

相关问题 更多 >