Python pandas使用时间索引值移动数据帧

时间:2017-01-13 09:54:00

标签: python pandas dataframe

我对python很新,并且正在与熊猫中的factorconvert()斗争。

我正在比较数据,但需要对齐以进行比较。为了对齐数据,我只需要移动一个数据的索引值。

shift

(粗体编辑选项似乎不起作用,但我想突出显示索引的那些部分)

我想用额外的时间量来移动我的数据框。请注意,时间以纳秒为单位。我意识到像Reference data: Data to be shifted: acc acc index index 1480681219**96**0000000 1 1480681220**04**0000000 8 1480681220**00**0000000 2 1480681220**08**0000000 9 1480681220**04**0000000 3 1480681220**12**0000000 7 1480681220**08**0000000 4 1480681220**16**0000000 10 1480681220**12**0000000 5 1480681220**20**0000000 6 之类的东西会将我的数据移动2个位置,但是我希望将数据移动到-80000000纳秒,在这种情况下是2个位置:

输入:

df.shift(2)

期望的输出:

                     acc
index                   
1480681220040000000    8
1480681220080000000    9
1480681220120000000    7
1480681220160000000   10
1480681220200000000    6

这是我的代码规模较小:

                      acc
index          
1480681219960000000     8
1480681220000000000     9          
1480681220040000000     7
1480681220080000000    10
1480681220120000000     6
1480681220160000000   NaN
1480681220200000000   NaN

当我运行原始代码时,它给了我这个错误:class device_data(object): def __init__(self): _index = [1480681220040000000, 1480681220080000000, 1480681220120000000, 1480681220160000000, 1480681220200000000] self.df = pd.DataFrame({'acc': [8, 9, 7, 10, 6], 'index': _index}) self.df = self.df.set_index('index') if __name__ == '__main__': extratime = np.int64(-40000000) session = dict() session[2] = {'testnumber': '401', 'devicename': 'peanut'} session[2]['data_in_device_class'] = device_data() print session[2]['data_in_device_class'].df if hasattr(session[2]['data_in_device_class'], 'df'): session[2]['data_in_device_class'].df = session[2]['data_in_device_class'].df.shift(int(round(extratime))) else: pass print session[2]['data_in_device_class'].df

我使用OverflowError: Python int too large to convert to C long来解决问题。我注意到,使用我的代码的缩小版本,它并不是真正需要的。

我的问题仍然是我如何使用shift来移动我的索引值,而不是需要移动的位数?

谢谢

2 个答案:

答案 0 :(得分:3)

IIUC:
您可以将索引重新分配给自己添加到额外时间。

将数据框df视为示例

df = pd.DataFrame(np.arange(100).reshape(5, -1))
df

enter image description here

我可以"转移"像这样整个数据框

df.index = df.index + 5
df

enter image description here

请告诉我这是否正确。否则,我会删除它。

答案 1 :(得分:3)

首先,您希望将索引移动所需的数量,然后移动reindex,以便更轻松我在此处copy,转移索引,我们reindex已移位索引的union和引入NaN行的原始索引:

In [232]:
df1 = df.copy()
df1.index -= 80000000
df1.reindex(df1.index.union(df.index))

Out[232]:
                      acc
index                    
1480681219960000000   8.0
1480681220000000000   9.0
1480681220040000000   7.0
1480681220080000000  10.0
1480681220120000000   6.0
1480681220160000000   NaN
1480681220200000000   NaN