2015-04-22 3 views
0

В приведенной ниже таблице данных 3-я строка - это заголовок, а столбцы Y, M и D дают год месяц и день соответственно. Тем не менее, я не могу читать их с помощью этого кода:Pandon pandas для чтения в файле с датой

df = pandas.read_csv(file_name, skiprows = 2, index_col='datetime', 
       parse_dates={'datetime': [0,1,2]}, 
       date_parser=lambda x: pandas.datetime.strptime(x, '%Y %m %d')) 

  OTH-000.opc 
       XKN1= 0.500000E-01 
    Y M D  PRCP  VWC1  
2006 1 1  0.0 0.17608E+00 
2006 1 2  6.0 0.21377E+00 
2006 1 3  0.1 0.22291E+00 
2006 1 4  3.0 0.23460E+00 
2006 1 5  6.7 0.26076E+00 

Я получаю KeyError: индекс списка вне диапазона. Какие-либо предложения?

+0

Этот образец данных работает для меня. Возможно, есть проблема с данными? Вы протестировали его, чтобы убедиться, что оно действительно? – Alexander

+0

да, я использую эти точные данные – user308827

+0

Какая версия python и Pandas? – Alexander

ответ

1

По умолчанию разделитель в read_csv является запятой. Ваш файл не использует запятые в качестве разделителей, так что вы только получаете одну большую колонку:

>>> pd.read_csv(file_name, skiprows = 2) 
     Y M D  PRCP  VWC1  
0 2006 1 1  0.0 0.17608E+00 
1 2006 1 2  6.0 0.21377E+00 
2 2006 1 3  0.1 0.22291E+00 
3 2006 1 4  3.0 0.23460E+00 
4 2006 1 5  6.7 0.26076E+00 
>>> pd.read_csv(file_name, skiprows = 2).columns 
Index([u' Y M D  PRCP  VWC1 '], dtype='object') 

Вы должны быть в состоянии использовать delim_whitespace=True:

>>> df = pd.read_csv(file_name, skiprows = 2, delim_whitespace=True, 
        parse_dates={"datetime": [0,1,2]}, index_col="datetime") 
>>> df 
      PRCP  VWC1 
datetime     
2006-01-01 0.0 0.17608 
2006-01-02 6.0 0.21377 
2006-01-03 0.1 0.22291 
2006-01-04 3.0 0.23460 
2006-01-05 6.7 0.26076 
>>> df.index 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2006-01-01, ..., 2006-01-05] 
Length: 5, Freq: None, Timezone: None 

(я не уточнил date_parser , потому что я ленив, и это будет правильно прочитано по умолчанию, но на самом деле это не плохая привычка быть явным.)

+0

спасибо! delim_whitespace помогает, однако, когда я делаю df.index, у меня нет временного ряда. любая идея почему? – user308827

+0

следующий вопрос для запроса выше находится здесь: http://stackoverflow.com/questions/29805372/date-parse-error-in-python-pandas-while-reading-file – user308827

Смежные вопросы