pandas:更改单元格中的时间戳会导致值不正确

时间:2016-03-31 18:28:48

标签: numpy pandas

我有一个pandas DataFrame,我试图更改其中一个单元格'时间戳到不同的时间戳。但是,我没有得到我期望的结果。这就是我所拥有的:

>>> df = pd.DataFrame({"d": [np.datetime64('2013-07-14T10:30:30.521Z'), np.datetime64('2013-07-21T10:30:30.521Z')]})
>>> df
                           d
0 2013-07-14 10:30:30.521000
1 2013-07-21 10:30:30.521000
>>> df.iloc[-1, df.columns.get_loc("d")] = np.datetime64('2013-08-29T10:30:30.521Z')
>>> df
                              d
0    2013-07-14 10:30:30.521000
1 1970-01-01 00:22:57.772230521

如示例所示,df.loc[1, "d"]获取的时间戳不是我分配给该单元格的时间戳。我不明白这种行为或我出错的地方。还有其他方法需要更改时间戳的值吗?

编辑:以上只是一个简单的例子。我的实际df有很多列,而不仅仅是1.我使用pandas版本0.16.1(并且无法更改版本)。

1 个答案:

答案 0 :(得分:1)

因为你的df只有一列你可以这样做:

In [29]: df
Out[29]:
                        d
0 2013-07-14 10:30:30.521
1 2013-07-21 10:30:30.521

In [30]: df.iloc[-1] = pd.to_datetime('2013-08-29T10:30:30.521Z')

In [31]: df
Out[31]:
                        d
0 2013-07-14 10:30:30.521
1 2013-08-29 10:30:30.521

更新:如果您的DF中有多列:

In [47]: df
Out[47]:
                        d  a
0 2013-07-14 10:30:30.521  1
1 2013-07-21 10:30:30.521  1

In [48]: df.loc[df.index[-1], 'd'] = pd.to_datetime('2013-08-29T10:30:30.521Z')

In [49]: df
Out[49]:
                        d  a
0 2013-07-14 10:30:30.521  1
1 2013-08-29 10:30:30.521  1