2013-04-03 1 views
0

EDIT:Искаженные данные .csv временных рядов в Enthought Python и Matplotlib

Спасибо за быстрый ответ, Джонатан.

Как вы можете предложить ниже, я попытался использовать numpy.loadtxt. К сожалению, появляется аналогичная ошибка. Выход data = numpy.loadtxt("MyData.csv", skiprows = 39, delimiter = ",") является

Traceback (most recent call last): 
    File "/Users/aleksnavratil/Desktop/sandbox.py", line 23, in <module> 
    data = numpy.loadtxt("MyData.csv", skiprows = 39, delimiter = ",") 
    File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/lib/npyio.py", line 805, in loadtxt 
    items = [conv(val) for (conv, val) in zip(converters, vals)] 
ValueError: could not convert string to float: ﾿ÒᆳóネÀëÐٟᄀB.AØME84ハモ 

же ошибка возникает при произвольных SkipRows kwargs. Возможно, это оправдывает гипотезу о проблеме кодирования символов. Я все еще в недоумении для решения.

/EDIT

У меня есть .csv datafile, полученный с помощью научного инструмента (а CETR Universal Media Tester УМТ-2). Данные представляют собой временные ряды измерений. Файл ведет себя странно, когда я обращаюсь к нему с Python, но хорошо себя ведет при доступе через cat, Nano, TextEdit и т. Д. Это явление сохраняется в машинах Windows 7 и Snow Leopard, хотя оба используют дистрибутив Enthought Scientific Python.

Выход

f = codecs.open("MyData.csv",encoding="ascii") 
data = f.xreadlines() 
for line in data: 
    print line 

является

**** 
?**************************************** 
?**************************************** 

ÿÿÿZ 
Ðí0 


þÿÿî 
üÿÿð 
éí0 
óÿÿí 
ôí0 

и т.д ....

Это пахнет проблемой кодирования, так что я исследовал немного:

Выход file -i "MyData.csv" является

MyData.csv: text/plain; charset=us-ascii 

Использование модуля CharDet; выход chardetect.py "MyData.csv" является

MyData.csv: ascii with confidence 1.0 

Использование пакета Codecs, я попробовал несколько общих кодировок безрезультатно. Кроме того, я пробовал использовать Matplotlib'scsv2rec. Выход

r = mlab.csv2rec(codecs.open("MyData.csv", 'rU',),skiprows=39, delimiter=",") 

является

Traceback (most recent call last): 
    File "/Volumes/AVN2109/Raw Data/CETR_Plotter.py", line 40, in <module> 
    r = mlab.csv2rec(codecs.open("MyData.csv", 'rU',),skiprows=39, delimiter=",") 
    File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-  packages/matplotlib/mlab.py", line 2181, in csv2rec 
    process_skiprows(reader) 
    File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site- packages/matplotlib/mlab.py", line 2176, in process_skiprows 
    for i, row in enumerate(reader): 
Error: line contains NULL byte 

Это также верно и для произвольного SkipRows kwargs.

Кроме того, прибор имеет возможность выпускать в качестве выходного сигнала .txt (а также CSV). В обоих случаях поведение одинаково. Возможно, мне не хватает чего-то очевидного. Кто-нибудь знает, как убедить эти данные играть хорошо с Python?

+0

Используя файл, на который вы ссылаетесь в своем вопросе, ответ @ jonathanrocher отлично работал для меня. Этот файл действительно тот же, с которым вы работаете? Он содержит только символы ascii. –

+0

Ну, я чувствую себя глупо. Оказывается, инструмент иногда выводит плохие данные. Эта проблема не имела ничего общего с Python. Уоррен, спасибо за это. Извините за то, что тратишь время всех. – avn2109

ответ

2

Пакет, который необходимо использовать для загрузки ваших данных, - numpy, и функция, которую я рекомендую вам начать, - loadtxt. Это самый простой и прекрасно работает в вашем случае, поскольку ваши данные однородны:

import numpy 
data = numpy.loadtxt("MyData.csv", skiprows = 39, delimiter = ",") 

Конечно файл является немного более сложным с, казалось бы, 2 массивы и некоторые вещи в верхней части вы можете или не хотите, чтобы бросить далеко. Вы можете уточнить это, сначала загрузив метаданные, а затем числовые значения.Вы также можете быть заинтересованы в сохранении заголовков для столбцов, чтобы создать "structured array", также называемый «массив записей». Для этого я рекомендую вам создать dtype с первым проходом, открыв файл и обнаружив имена столбцов и их единицы и передав этот dtype для загрузки после него, как описано выше.