DATE和TIME列的简单索引

时间:2016-09-03 16:41:00

标签: python pandas numpy dataframe

我有一个包含如下所示数据的CSV:

<DATE>      <TIME>    <OPEN>  <LOW>  <HIGH>  <CLOSE>  
2001-01-03  00:00:00  0.9507  0.9505  0.9509  0.9506  
....   
2015-05-13  02:00:00  0.9496  0.9495  0.9509  0.9505

我想在&lt; DATE&gt;上创建一个索引和&lt; TIME&gt;但保留两列作为普通列,以便我可以引用它们。

由于数据存储在CSV中,我不确定在创建数据帧之前如何将2列(DATE和TIME)解析为一列。

我已经看了很多答案,但他们似乎对我想做的事情感到困惑,我已经确信我错过了简单的解决方案

Context around what lead me to this:

我已经确定设置新值的正确方法(当我计算滚动平均值时)是:

df.set_value('index', 'column', value)

因为我的索引当前只是日期,所以引用特定行的索引(比如第一行)意味着设置了许多值而不是一个

1 个答案:

答案 0 :(得分:2)

<强>更新

In [170]: df = pd.read_csv('/path/to/file.csv', parse_dates={'TIMESTAMP': ['DATE','TIME']}).set_index('TIMESTAMP')

In [171]: df
Out[171]:
                       OPEN     LOW    HIGH   CLOSE
TIMESTAMP
2001-01-03 00:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-03 01:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-03 02:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-03 03:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-03 04:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-04 00:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-04 01:00:00  0.9507  0.9505  0.9509  0.9506
2001-01-04 02:00:00  0.9507  0.9505  0.9509  0.9506

In [172]: df.index.dtype
Out[172]: dtype('<M8[ns]')

OLD回答:

你可以这样做:

In [155]: df
Out[155]:
   a  b  c
0  0  0  3
1  1  2  0
2  2  2  3
3  1  0  0
4  1  3  2
5  4  0  1
6  2  0  3
7  2  1  2
8  3  3  4
9  0  0  3

In [156]: df.join(df.iloc[:, :2], rsuffix='_idx').set_index((df.iloc[:, :2].columns + '_idx').tolist())
Out[156]:
             a  b  c
a_idx b_idx
0     0      0  0  3
1     2      1  2  0
2     2      2  2  3
1     0      1  0  0
      3      1  3  2
4     0      4  0  1
2     0      2  0  3
      1      2  1  2
3     3      3  3  4
0     0      0  0  3

但是,你真的不需要它,因为它是多余的 - 你仍然在索引中拥有你的数据并且可以使用它......

更新:从Pandas 0.20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers开始。