我有一个大型数据集,表示需要作为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'
提前致谢!
顺便说一句,时间戳以秒为单位,从第一个样本开始...或者这是我的意图......
答案 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]'