【发布时间】:2016-06-08 23:56:29
【问题描述】:
我正在尝试使用 Pandas 使用 ffill 制作一些常规时间序列,但出现非唯一索引错误。
这是我的代码:
for d in data_types:
series = df[df['datatype'] == d]['measurementvalue'].values
times = df[df['datatype'] == d]['displaydate'].values
data_series = pd.Series(series, index = times)
data_series.drop_duplicates(inplace = True)
data_series.asfreq('30Min', method = 'ffill')
all_series.append(data_series)
由于asfreq 调用一个特定的data_type,我收到以下错误:
ValueError: cannot reindex a non-unique index with a method or limit
这是一组数据,其中drop_duplicates 导致长度从 2119 下降到 1299,表明它是最密集(时间方面)的值。
===========
编辑
我做了一些探索,并通过将时间滞后到索引中最接近的秒来缩小问题的范围,我可以看到当两行落在同一秒时创建的“重复”索引。我的猜测是这些是有问题的行...
2016-03-02 04:03:29.693 8.250347
2016-03-02 04:03:29.693 7.478983
2016-03-06 00:19:30.183 45.97248
2016-03-06 00:19:30.183 24.06088
2016-03-14 02:44:58.783 9.169300
2016-03-14 02:44:58.783 4.221998
2016-03-18 21:54:20.097 73.80586
2016-03-24 16:41:19.825 3.608202
2016-03-24 16:41:19.825 3.887996
2016-03-25 03:35:57.197 4.974968
2016-03-25 03:35:57.197 5.638140
2016-04-02 11:18:27.290 7.923712
2016-04-02 11:18:27.290 6.143240
2016-04-10 19:59:54.677 3.143636
2016-04-10 19:59:54.686 14.222390
删除值的最佳方法是什么?假设我想编写一个自定义方法,将给定索引值的所有重复值发送给我,并发送回应该用于该索引值的单个值。我该怎么做?
【问题讨论】:
-
这意味着您的数据框中有重复的索引。要查看它:
df[df.index.duplicated()]也可以查看 stackoverflow.com/questions/27236275/… 和 stackoverflow.com/questions/27711623/… -
另外,无论何时发布,最好包含使您的问题“Minimum, Complete, and Reproducible”的示例数据
-
@michael_j_ward 感谢您的建议。我不知道那个方法调用。知道未来很方便。不幸的是,它对我没有帮助,因为原始索引没有重复......当我施加频率时,它们只会被重复。我现在正在添加更多数据。