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)
이후 datatype
및 column
귀하의 예제에 하드 코딩되어, 그것을 처리하기 위해 약간 빠른 것 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()