当前位置: 首页 > 知识库问答 >
问题:

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

乜栋
2023-03-14

我要求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非常陌生,希望确保我了解所有内容。

共有3个答案

顾嘉纳
2023-03-14

借用Python Cookbook,
一个更简洁的模板代码可能如下所示:

import csv
with open('stocks.csv') as f:
    f_csv = csv.reader(f) 
    headers = next(f_csv) 
    for row in f_csv:
        # Process row ...
丁韬
2023-03-14

要跳过第一行,只需调用:

next(inf)

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

澹台季萌
2023-03-14

您可以使用csv模块的Sniffer类的实例来推断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)

由于数据类型在您的示例中是硬编码的,这样处理会稍微快一点:

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

注意:上面的代码是针对Python3.x的。对于Python 2.x,使用以下行打开文件,而不是显示的内容:

with open('all16.csv', 'rb') as file:
 类似资料:
  • 问题内容: 我要Python从一列CSV数据中打印最少的数字,但是第一行是列号,我不希望Python将第一行考虑在内。如何确定Python忽略第一行? 到目前为止,这是代码: 你还能解释你在做什么,而不仅仅是给出代码吗?我对Python非常陌生,并希望确保我了解所有内容。 问题答案: 你可以使用模块类的实例来推断CSV文件的格式,并检测是否存在标头行以及仅在必要时才跳过第一行的内置函数: 由于在你

  • 问题内容: 我有一个文本文件,内容为: 我已经了解了所有内容,并且一切运行正常,但事实是它读取了第一行,这是.txt文件的一种图例,必须将其忽略。 如何使用Scanner类忽略第一行? 问题答案: 在进行任何处理之前,只需调用一次scan.nextLine()即可解决问题。

  • 有一个文本字段,当失去焦点时,它将验证输入,如果没有传递,则打印出错误消息(简单地说,这里只有一个空检查)。文本字段旁边有一个按钮,单击它就会打印出文本。 正如我所尝试的,当输入一些文本然后单击按钮时,它会触发文本字段的焦点丢失事件和按钮事件。换句话说,它将首先进行验证,然后打印出输入的文本。 我的问题来了,如果验证未通过,防止打印文本的好方法是什么?或者如果验证未通过,是否有办法“忽略”按钮上的

  • 我尝试使用一个布尔标志来指示验证结果,并在执行按钮操作时检查该标志,但我认为这不是一个好的方法。我知道Swing中有一个事件调度线程来处理这些事件,我可以从这里取消这些事件吗? 下面是一段解释这个问题的代码:

  • 我有一个存储库,其findAll方法用标记。我正在将生成的SQL打印到日志中,我可以看到当直接在Java中使用时,它会生成正确的连接选择(即)。但是当我通过REST调用它时,这种情况不会发生。我要么得到一个异常,BC。懒加载代理不能序列化,或者如果我添加杰克逊-数据库-hibernate5,我可以看到额外的查询。 我尝试在这里生成最小复制:https://github.com/cptwunderl