Я прошу 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 и хотел бы убедиться, что все понимаю.
1.0
для каждой строки в вашем файле, а затем берете минимум, который будет1.0
?1.0
. :)datatype(row[column]
... это то, чего, я думаю, пытается достичь ОПОтветы:
Вы можете использовать экземпляр класса
csv
модуля,Sniffer
чтобы определить формат файла CSV и определить, присутствует ли строка заголовка вместе со встроеннойnext()
функцией, чтобы пропустить первую строку только при необходимости:Поскольку
datatype
иcolumn
жестко запрограммированы в вашем примере, было бы немного быстрее обработатьrow
следующее:Примечание: приведенный выше код предназначен для Python 3.x. Для Python 2.x используйте следующую строку, чтобы открыть файл вместо того, что показано:
источник
has_header(file.read(1024))
, чтобы писатьhas_header(file.readline())
? Я часто это вижу, но не понимаю, какhas_reader()
определить, есть ли заголовок в отдельной строке CSV-файла ...Sniffer
работы не описываются. FWIW Я никогда не видел,has_header(file.readline())
чтобы его использовали, и даже если бы он работал большую часть времени, я бы с большим подозрением отнесся к этому подходу по указанным причинам.file.read(1024)
генерирует ошибки в csv lib python :. См. Также здесь, например.readline()
наread(1024)
. Пока мне удалось найти только людей, которые перешли на readline, чтобы решить проблему csv.dialect.Чтобы пропустить первую строку, просто позвоните:
Файлы в Python - это итераторы по строкам.
источник
В аналогичном случае использования мне приходилось пропускать надоедливые строки перед строкой с моими фактическими именами столбцов. Это решение отлично сработало. Сначала прочтите файл, затем передайте список в
csv.DictReader
.источник
data
словарь, и этот ответ на самом деле ничего не добавляет к принятому.data = dict()
и заполнить, но это неэффективно и не идиоматично. Кроме того, следует использовать литералы dict ({}
) иenumerate
даже тогда.@Veedrac
если хотите быть уверенным, что я уведомлен, хотя Stack Overflow, похоже, может угадать по имени пользователя. (Я не пишу,@Maarten
потому что ответчик будет уведомлен по умолчанию.)Заимствованный из поваренной книги python ,
более сжатый код шаблона может выглядеть так:
источник
Обычно вы используете,
next(incsv)
который продвигает итератор на одну строку, поэтому вы пропускаете заголовок. Другой (скажем, вы хотите пропустить 30 строк) будет:источник
используйте csv.DictReader вместо csv.Reader. Если параметр fieldnames опущен, значения в первой строке csvfile будут использоваться как имена полей. тогда вы сможете получить доступ к значениям полей, используя строку ["1"] и т. д.
источник
Новый пакет pandas может быть более актуальным, чем csv. Приведенный ниже код будет читать файл CSV, по умолчанию интерпретируя первую строку как заголовок столбца и находя минимум по столбцам.
источник
pd.read_csv('all16.csv').min()
Ну, моя мини-библиотека-оболочка тоже подойдет.
Между тем, если вы знаете, что такое индекс столбца заголовка, например «Столбец 1», вы можете сделать это вместо этого:
источник
Для меня самый простой способ - использовать диапазон.
источник
Поскольку это связано с тем, что я делал, я поделюсь здесь.
Что делать, если мы не уверены, есть ли заголовок, и вам также не хочется импортировать сниффер и другие вещи?
Если ваша задача простая, такая как печать или добавление в список или массив, вы можете просто использовать оператор if:
источник
В документации по CSV-модулю Python 3 приведен следующий пример:
Он
Sniffer
попытается автоматически определить многие вещи в файле CSV. Вам нужно явно вызвать егоhas_header()
метод, чтобы определить, есть ли в файле строка заголовка. Если это так, пропустите первую строку при итерации строк CSV. Сделать это можно так:источник
Я бы использовал tail, чтобы избавиться от нежелательной первой строки:
источник
просто добавьте [1:]
пример ниже:
это работает для меня в iPython
источник
Python 3.X
Обрабатывает UTF8 BOM + HEADER
Было довольно неприятно, что
csv
модуль не мог легко получить заголовок, также есть ошибка с UTF-8 BOM (первый символ в файле). Это работает для меня, используя толькоcsv
модуль:источник
Я бы преобразовал csvreader в список, а затем вставил первый элемент
источник
Python 2.x
csvreader.next()
Python 3.x
csvreader.__next__()
источник