用于阅读日期文件的Python熊猫

时间:2015-04-22 16:58:49

标签: python pandas

在下面的数据框中,第3行是标题,Y,M和D列分别给出年月和日。但是,我无法使用此代码阅读它们:

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:列表索引超出范围。有什么建议吗?

1 个答案:

答案 0 :(得分: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,因为我是懒惰的,默认情况下会正确阅读,但实际上这不是一个明确的坏习惯。)