Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日期和时间列的简单索引_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 日期和时间列的简单索引

Python 日期和时间列的简单索引,python,pandas,numpy,dataframe,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 我确定设置新值的正确方法(当我计算滚动平均值时)是:

我有一个包含如下数据的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
我确定设置新值的正确方法(当我计算滚动平均值时)是:


因为我的索引当前刚好是最新的,所以引用特定行(例如,第一行)的索引意味着设置了许多值,而不是一个值更新:

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]')
但是,你并不真的需要它,因为它是多余的-你仍然有你的数据在索引中,可以使用它



更新:从Pandas 0.20.1开始

对不起,我应该澄清一下,每个日期值都有多行,即2015-01-01 00:00和2015-01-01 01:00。所以,如果我索引日期,如果我引用一个日期,我就有多行。如果这有道理的话?@cardycakes,你的目标不清楚。。。您可以将日期和时间解析为单个时间戳(数据类型:
datetime
)列,并将其设置为索引。你能解释一下你想用你的DF做什么吗?这是有道理的。但是,由于数据是CSV格式的,您是说我应该将两列解析为一列,然后在创建DF后设置索引吗?谢谢MaxU,这太完美了
df.set_value('index', 'column', value)
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]')
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