[python] CSV 데이터를 처리 할 때 데이터의 첫 줄을 무시하는 방법은 무엇입니까?

Python에 CSV 데이터 열에서 최소 수를 인쇄하도록 요청하고 있지만 맨 위 행은 열 번호이며 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)

이후 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의 파일은 행에 대한 반복자입니다.


답변

유사한 사용 사례에서 실제 열 이름이있는 줄 앞에 성가신 줄을 건너 뛰어야했습니다. 이 솔루션은 잘 작동했습니다. 먼저 파일을 읽은 다음 목록을 csv.DictReader.

with open('all16.csv') as tmp:
    # Skip first line (if any)
    next(tmp, None)

    # {line_num: row}
    data = dict(enumerate(csv.DictReader(tmp)))


답변

에서 차용 파이썬 요리 책 ,
더 간결 템플릿 코드는 다음과 같습니다

import csv
with open('stocks.csv') as f:
    f_csv = csv.reader(f)
    headers = next(f_csv)
    for row in f_csv:
        # Process row ...


답변

일반적으로 next(incsv)반복자를 한 행 앞당기는 것을 사용 하므로 헤더를 건너 뜁니다. 다른 하나 (30 행을 건너 뛰고 싶었다고 가정)는 다음과 같습니다.

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


답변

csv.Reader 대신 csv.DictReader를 사용하십시오. fieldnames 매개 변수를 생략하면 csvfile의 첫 번째 행에있는 값이 필드 이름으로 사용됩니다. 그러면 row [ “1”] 등을 사용하여 필드 값에 액세스 할 수 있습니다.


답변

새로운 ‘pandas’패키지는 ‘csv’보다 관련성이 더 높을 수 있습니다. 아래 코드는 기본적으로 첫 번째 줄을 열 헤더로 해석하고 열에서 최소값을 찾는 CSV 파일을 읽습니다.

import pandas as pd

data = pd.read_csv('all16.csv')
data.min()