【发布时间】:2018-09-18 15:38:28
【问题描述】:
我有一个带有dtype=object 的DataFrame:
YY MM DD hh var1 var2
.
.
.
10512 2013 01 01 06 1.64 4.64
10513 2013 01 01 07 1.57 4.63
10514 2013 01 01 08 1.56 4.71
10515 2013 01 01 09 1.45 4.69
10516 2013 01 01 10 1.53 4.67
10517 2013 01 01 11 1.31 4.63
10518 2013 01 01 12 1.41 4.70
10519 2013 01 01 13 1.49 4.80
10520 2013 01 01 20 1.15 4.91
10521 2013 01 01 21 1.14 4.74
10522 2013 01 01 22 1.10 4.95
正如所见,缺少对应于小时的行 (hh)(例如,在 10519 和 10520 行之间,hh 从 13 跳到 20)。我试图通过将hh 设置为索引来添加差距,正如这里讨论的那样:Missing data, insert rows in Pandas and fill with NAN
df=df.set_index('hh')
new_index = pd.Index(np.arange(0,24), name="hh")
df=df.reindex(new_index).reset_index()
并达到类似:
YY MM DD hh var1 var2
10519 2013 01 01 13 1.49 4.80
10520 2013 01 01 14 Nan Nan
10521 2013 01 01 15 Nan Nan
10522 2013 01 01 16 Nan Nan
...
10523 2013 01 01 20 1.15 4.91
10524 2013 01 01 21 1.14 4.74
10525 2013 01 01 22 1.10 4.95
但是我遇到了df=df.reindex(new_index) 部分的错误"cannot reindex from a duplicate axis"。
每个hh=0,1,...,23 都有重复的值,因为hh 的相同值将在不同的月份(MM) 和年份(YY) 中重复。
大概就是这个原因吧。我该如何解决这个问题?
一般来说,当索引包含重复数据时,如何填充 pandas DataFrame 的缺失行。我感谢任何 cmets。
【问题讨论】:
-
缺失数据到底在哪里,我在 10519 和 10520 之间看不到 hh 的 NaN?
-
@KhalilAlHooti 数据具有每小时分辨率,但它从 13 跳到 20。我想用 var1 和 var 2 的 Nan 值插入缺失的行(14、15、16,...)所以之后我可以使用插值等简单技术计算 Nans。