在Pandas数据帧中格式化时间戳

时间:2018-01-11 20:59:05

标签: python pandas

我有一个大型数据集,表示需要作为pandas数据帧传递给另一个函数的电信号(作为数组)。问题是数据框必须有一个带有freq属性的索引,而原始数据集没有时间戳,带有样本的1d数组,但我知道样本频率(86Hz)所以我可以为其分配一个时间戳每个样本:

static

然后我将其转入数据帧:

>>>a = [1,2,3,4,5,6]
>>>b = []
>>>j=0
>>>for i in a:
>>>    b.append(round(j, 3))
>>>    j = j+(1/86)
>>>c = np.c_[b, a]
     ([[ 0.   ,  1.   ],
       [ 0.012,  2.   ],
       [ 0.023,  3.   ],
       [ 0.035,  4.   ],
       [ 0.047,  5.   ],
       [ 0.058,  6.   ]])

问题是索引没有freq属性,我认为它是一个格式化问题,但不确定,经过谷歌搜索后我没有找到任何东西。

写作时

d = pd.DataFrame(data=c[0:,1], index=c[0:,0])

        0
0.000   1.0
0.012   2.0
0.023   3.0
0.035   4.0
0.047   5.0
0.058   6.0

它应该返回86,但是给了我一个AttributeError:' Float64Index'对象没有属性' freq'

提前致谢!

顺便说一句,时间戳以秒为单位,从第一个样本开始...或者这是我的意图......

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以这样做:

In [109]: d.index = pd.timedelta_range(d.index.min(), periods=len(d), freq='86L')

In [110]: d
Out[110]:
                   0
00:00:00         1.0
00:00:00.086000  2.0
00:00:00.172000  3.0
00:00:00.258000  4.0
00:00:00.344000  5.0
00:00:00.430000  6.0

In [111]: d.index.freq
Out[111]: <86 * Millis>

In [112]: d.index.dtype
Out[112]: dtype('<m8[ns]')

In [113]: d.index.dtype_str
Out[113]: 'timedelta64[ns]'