我有一个包含如下所示数据的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)
因为我的索引当前只是日期,所以引用特定行的索引(比如第一行)意味着设置了许多值而不是一个
答案 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开始。