1. ホーム
  2. python

[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。

2022-07-23 15:38:19

質問

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の非常に初心者で、すべてを理解しているかどうか確認したいのです。

どのように解決するのですか?

のインスタンスを使用することができます。 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)

以降 datatype であり column がハードコードされている場合、この例では row をこのように処理する方が若干速くなります。

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

注意 上記のコードはPython 3.x用です。Python 2.xの場合、表示されている行の代わりに、ファイルを開くために次の行を使用してください。

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