CSV 데이터를 처리할 때 데이터의 첫 번째 줄을 무시하는 방법은 무엇입니까?
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
코드만 주는 것이 아니라 당신이 무엇을 하고 있는지도 설명해 주시겠습니까?저는 파이썬에 매우 익숙하지 않아서 제가 모든 것을 이해하고 있는지 확인하고 싶습니다.
의 예를 사용할 수 있습니다.csvCSV 파일의 형식을 추론하고 헤더 행이 기본 제공과 함께 있는지 여부를 탐지하는 모듈의 클래스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의 파일은 줄 위에서 반복됩니다.
파이썬 요리책에서 빌렸어요
보다 간결한 템플릿 코드는 다음과 같습니다.
import csv
with open('stocks.csv') as f:
f_csv = csv.reader(f)
headers = next(f_csv)
for row in f_csv:
# Process row ...
유사한 사용 사례에서 저는 실제 열 이름이 있는 행 앞에서 성가신 행을 건너뛰어야 했습니다.이 해결책은 잘 작동했습니다.먼저 파일을 읽은 다음 목록을 다음으로 전달합니다.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)))
일반적으로 사용할 수 있습니다.next(incsv)반복기를 한 줄 전진시키므로 헤더를 건너뜁니다.다른 하나는 다음과 같습니다(30개 행을 건너뛰고 싶었다고 가정).
from itertools import islice
for row in islice(incsv, 30, None):
# process
csv를 사용합니다.CSV 대신 DictReader.독자.field names 매개 변수를 생략하면 csv 파일의 첫 번째 행에 있는 값이 필드 이름으로 사용됩니다.그러면 행["1"] 등을 사용하여 필드 값에 액세스할 수 있습니다.
파이썬 2.x
현재 방언에 따라 구문 분석된 독서자의 반복 가능한 개체의 다음 행을 목록으로 반환합니다.
csv_data = csv.reader(open('sample.csv'))
csv_data.next() # skip first row
for row in csv_data:
print(row) # should print second row
파이썬 3.x
현재 방언에 따라 구문 분석된 독서자 대상 개체의 다음 행을 목록으로 반환합니다(개체가 독서자()에서 반환된 경우) 또는 딕트(DictReader 인스턴스인 경우).보통 이것을 다음(읽기)으로 불러야 합니다.
csv_data = csv.reader(open('sample.csv'))
csv_data.__next__() # skip first row
for row in csv_data:
print(row) # should print second row
이것은 매우 오래된 질문일 수 있지만 판다와 함께 우리는 매우 쉬운 해결책을 가지고 있습니다.
import pandas as pd
data=pd.read_csv('all16.csv',skiprows=1)
data['column'].min()
skiprows=1을 사용하면 첫 번째 행을 건너뛰고 data['column'].min을 사용하여 최소값을 찾을 수 있습니다.
Python 3 CSV 모듈에 대한 설명서는 다음과 같은 예를 제공합니다.
with open('example.csv', newline='') as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
# ... process CSV file contents here ...
그Sniffer에서는 CSV 파일에 대한 많은 정보를 자동으로 검색하려고 합니다.당신은 그것을 명시적으로 부를 필요가 있습니다.has_header()파일에 헤더 줄이 있는지 확인하는 방법입니다.그런 경우 CSV 행을 반복할 때 첫 번째 행을 건너뜁니다.다음과 같이 할 수 있습니다.
if sniffer.has_header():
for header_row in reader:
break
for data_row in reader:
# do something with the row
새 'pandas' 패키지가 'csv' 패키지보다 더 관련성이 있을 수 있습니다.아래 코드는 CSV 파일을 읽습니다. 기본적으로 첫 번째 줄을 열 머리글로 해석하고 열 전체의 최소값을 찾습니다.
import pandas as pd
data = pd.read_csv('all16.csv')
data.min()
제가 하고 있던 일과 관련이 있기 때문에 여기서 공유하겠습니다.
헤더가 있는지 확신할 수 없고 스니퍼와 다른 것들도 수입하고 싶지 않다면 어떻게 하시겠습니까?
목록이나 배열을 인쇄하거나 추가하는 등의 작업이 기본적인 경우 if 문을 사용하면 됩니다.
# Let's say there's 4 columns
with open('file.csv') as csvfile:
csvreader = csv.reader(csvfile)
# read first line
first_line = next(csvreader)
# My headers were just text. You can use any suitable conditional here
if len(first_line) == 4:
array.append(first_line)
# Now we'll just iterate over everything else as usual:
for row in csvreader:
array.append(row)
제 미니 포장지 라이브러리도 그 일을 할 수 있을 겁니다.
>>> import pyexcel as pe
>>> data = pe.load('all16.csv', name_columns_by_row=0)
>>> min(data.column[1])
한편, 헤더 열 인덱스 1이 무엇인지 알고 있는 경우(예: "열 1") 대신 다음 작업을 수행할 수 있습니다.
>>> min(data.column["Column 1"])
저에게 가장 쉬운 방법은 레인지를 사용하는 것입니다.
import csv
with open('files/filename.csv') as I:
reader = csv.reader(I)
fulllist = list(reader)
# Starting with data skipping header
for item in range(1, len(fulllist)):
# Print each row using "item" as the index value
print (fulllist[item])
csvreader를 목록으로 변환한 다음 첫 번째 요소를 팝합니다.
import csv
with open(fileName, 'r') as csvfile:
csvreader = csv.reader(csvfile)
data = list(csvreader) # Convert to list
data.pop(0) # Removes the first row
for row in data:
print(row)
원치 않는 첫 번째 줄을 제거하기 위해 꼬리를 사용할 것입니다.
tail -n +2 $INFIL | whatever_script.py
[1:]만 추가
아래의 예:
data = pd.read_csv("/Users/xyz/Desktop/xyxData/xyz.csv", sep=',', header=None)**[1:]**
그것은 iPython에서 나에게 효과가 있습니다.
파이썬 3.X
UTF8 BOM + HEADER 처리
그것은 꽤 좌절스러웠습니다.csv모듈이 헤더를 쉽게 가져올 수 없습니다. 또한 UTF-8 BOM(첫 번째 charin file)에 버그가 있습니다.이 기능은 다음 기능만 사용하여 사용할 수 있습니다.csv모듈:
import csv
def read_csv(self, csv_path, delimiter):
with open(csv_path, newline='', encoding='utf-8') as f:
# https://bugs.python.org/issue7185
# Remove UTF8 BOM.
txt = f.read()[1:]
# Remove header line.
header = txt.splitlines()[:1]
lines = txt.splitlines()[1:]
# Convert to list.
csv_rows = list(csv.reader(lines, delimiter=delimiter))
for row in csv_rows:
value = row[INDEX_HERE]
간단한 솔루션은 csv를 사용하는 것입니다.DictReader()
import csv
def read_csv(file): with open(file, 'r') as file:
reader = csv.DictReader(file)
for row in reader:
print(row["column_name"]) # Replace the name of column header.
언급URL : https://stackoverflow.com/questions/11349333/how-to-ignore-the-first-line-of-data-when-processing-csv-data
'programing' 카테고리의 다른 글
| 왜 이 주장된 역참조 유형이 실행된 포인터 경고가 컴파일러에 특정적입니까? (0) | 2023.08.10 |
|---|---|
| C++에서 문자열과 char[] 유형의 차이 (0) | 2023.08.05 |
| Spring Boot MongoDB 연결 문제 (0) | 2023.08.05 |
| 마지막으로 수정된 날짜까지 N개의 파일을 디렉토리 순서로 가져오는 방법은 무엇입니까? (0) | 2023.08.05 |
| SQL Server의 중첩된 트랜잭션 (0) | 2023.08.05 |