使用datetime值作为pandas索引,然后获取行的日期值

时间:2017-07-15 17:05:30

标签: pandas

我正在学习使用熊猫,我正在解析NOAA的每日观察结果:(为了清楚起见,这里被截断)

import pandas as pd
import StringIO

csv_data = """
date,maxt,mint,avgt,pcpn,snow,snwd,hdd,cdd
1872-01-01,48,28,38.0,0.00,M,M,27,0
1872-01-02,43,28,35.5,0.00,M,M,29,0
1872-01-03,47,25,36.0,0.00,M,M,29,0
1872-01-04,39,22,30.5,0.00,M,M,34,0
1872-01-05,37,15,26.0,0.03,M,M,39,0
"""
fake_csv_file = StringIO.StringIO(csv_data)

df = pd.read_csv(fake_csv_file, parse_dates=['date'], index_col='date')

当我检查df.index时,我的索引似乎包含datetime个值:

>>> df.index
DatetimeIndex(['1872-01-01', '1872-01-02', '1872-01-03', '1872-01-04',
               '1872-01-05'],
              dtype='datetime64[ns]', name=u'date', freq=None)

现在我的date值是索引而不是列,我无法弄清楚如何访问date值。我可以选择一行:

>>> first_row = df.loc['1872-01-01']
>>> print first_row
maxt    48
mint    28
avgt    38
pcpn     0
snow     M
snwd     M
hdd     27
cdd      0
Name: 1872-01-01 00:00:00, dtype: object

现在我想以编程方式获取该日期值,但first_row.index会返回我没想到的内容:

>>> first_row.index
Index([u'maxt', u'mint', u'avgt', u'pcpn', u'snow', u'snwd', u'hdd', u'cdd'], dtype='object')

我希望first_row.index会返回datetime值,而是返回所有列的列表。

我做错了什么吗?我错过了什么?

如果我的问题不明确,我希望能够以任何列的方式获取行的日期值:

>>> df.maxt
48
>>> df.mint
28

显然,这会返回一个关键错误:

>>> df.date # <- something like this?

此外,如果有人问,我可能想要获取日期值,以便我可以使用dtdayofyeardayofweek个好东西。

1 个答案:

答案 0 :(得分:1)

我认为你需要name Series什么是标量值:

first_row = df.loc['1872-01-01']
print (first_row.name)
1872-01-01 00:00:00

然后使用:

print (first_row.name.dayofyear)
1
print (first_row.name.dayofweek)
0