У меня есть сценарий, который читает некоторые данные измерений в форме CSV, а затем делает все виды заговора и прочее с ним.Импорт CSV со случайным числом столбцов
Теперь у меня есть новый набор данных, где какой-то идиот сочтет это полезным, чтобы добавить некоторые случайные комментарии в конце строки, например:
01.02.1988 00:00:00 ; 204.94
01.03.1988 00:00:00 ; 204.87 ; something
01.04.1988 00:00:00 ; 205.41
01.05.1988 00:00:00 ; 205.64 ; something ; something else
01.06.1988 00:00:00 ; 205.59 ; also something
01.07.1988 00:00:00 ; 205.24
, который дает мне хорошую
ValueError: Expected 2 fields in line 36, saw 3
и так далее.
Согласно this и this При чтении я должен использовать аргумент names=['whatever','else']
.
Но как-то это все происходит не так. Так вот некоторые примеры:
CSV файл
Stuff
more stuff I dont need
Date;level;crap1;crap2;crap3;crap4;crap5;crap6
01.01.1988 00:00:00 ; 204.87
01.02.1988 00:00:00 ; 204.94
01.03.1988 00:00:00 ; 204.87
«хорошо» заголовок, очевидно, «ручной», но я просто должен быть в состоянии пропустить это !?
CSV читатель
ValReader = pd.read_csv(csv_list[counter],sep=r'\s*;',skiprows=DateStart,names=['Date','level','crap1','crap2','crap3','crap4','crap5','crap6'],usecols=['Date','level'],index_col='Date',dayfirst=True,parse_dates=True)
Что я получаю
print 'ValReader'
level
Date
Date level
01.04.2003 00:00:00 200.76
01.05.2003 00:00:00 200.64
01.06.2003 00:00:00 200.53
Какой следующий, что вызывает уровень, чтобы получить обрабатываются как строки.
OK, легкий, что руководство строке заголовка в CSV (который хорошо работал в предыдущей версии, которая была только обрабатывать хорошие данные) является виновником, так что я просто установить skiprows
к skiprows=DateStart+1
, но результаты в
ValueError: Number of passed names did not match number of header fields in the file
Так что, очевидно, я полностью потерял то, как панды обрабатывают имена и позиции столбцов.
Я забыл, почему именно я использовал регулярное выражение, но я помню, что некоторые проблемы с различными пространствами были заполнены до и после ';'. Но, похоже, это работает. Однако теперь, кажется, игнорируется 'na_values = 'hole'', который я добавил, и, следовательно, ошибки с' ValueError: невозможно преобразовать строку в float: hole'. Я буду играть немного больше и посмотреть, что могло бы вызвать это. –
@JC_CL, на мой взгляд, обычно существуют способы устранить использование регулярного выражения в файле csv. Для вашего случая использования, если требуемые поля не содержат шумных ';', вы можете анализировать данные как есть и очищать шум после этого. Но в любом случае надеюсь, что вы можете понять это и удачи :) – Anzel
Я не уверен, что действительно изменилось в моих данных, или что еще я изменил в своем сценарии, но пока не работает regexless 'sep'. Я не мог понять, что, черт возьми, случилось с моими «na_values», поэтому я сделал это жестоким образом и изменил «дыру» на «NaN» с sed в моей предварительной обработке. Не элегантный, но, похоже, он работает. Выключить следующий момент WTF, затем ... –