2015-04-22 86 views
0

在下面的數據框中,第三行是標題,Y,M和D列分別給出年份月份和日期。但是,我不能夠在使用此代碼閱讀:用於在日期文件中讀取的Python熊貓

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和熊貓? – 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

謝謝!但是,當我做df.index時,delim_whitespace有幫助,但我沒有得到時間序列。任何想法爲什麼? – user308827

+0

對於上面的查詢的後續問題在這裏:http://stackoverflow.com/questions/29805372/date-parse-error-in-python-pandas-while-reading-file – user308827