私は次のようなDataFrameを持っdtype=object
ています:
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
ここで説明したように、インデックスとして設定してギャップを追加しようとしました:データがない、パンダに行を挿入し、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
しかし"cannot reindex from a duplicate axis"
、パーツのエラーが発生しましたdf=df.reindex(new_index)
。hh=0,1,...,23
同じ値がhh
異なる月(MM
)と年(YY
)で繰り返されるため、それぞれに重複する値があります。おそらくそれが理由です。どうすれば問題を解決できますか?
一般に、インデックスに重複データが含まれている場合、どのようにしてパンダDataFrameの欠落している行を埋めることができますか。コメントありがとうございます。
まず、datetime型の時刻(日付と時刻を含む)を使用して新しい列を作成します。これを行う1つの方法は、次のとおりです。
df = df.rename(columns={'YY': 'year', 'MM': 'month', 'DD': 'day', 'hh': 'hour'})
df['time'] = pd.to_datetime(df[['year', 'month', 'day', 'hour']])
使用するにはto_datetime
、このように、列名をする必要がありyear
、month
、day
及びhour
その理由でrename
使用されています。
期待される結果を得るには、この新しい列をインデックスとして設定し、次を使用しますresample
。
df.set_index('time').resample('H').mean()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加