2016-10-31 10 views
1

私は次のコードを使用してパンダに1つの新しいデータフレーム(DF3)に2つのデータフレーム(DFDF2)をマージするpd.concatを使用しようとしています:パイソン/パンダのNaNデータの問題をマージ

DF3 = pd.concat([DF、DF2])

これはほとんど私はそれがしたいように動作しますが、それは問題を作成します。

dfには、現在の日付のデータが含まれており、インデックスは時系列です。それは次のようになります。

     Facility Servers PUE 
2016-10-31 00:00:00 6.0   5.0  1.2 
2016-10-31 00:30:00 7.0   5.0  1.4 
2016-10-31 01:00:00 6.0   5.0  1.2 
2016-10-31 01:30:00 6.0   5.0  1.2 
2016-10-31 02:00:00 6.0   5.0  1.2 

DF2はNaNのデータが含まれており、インデックスが DF の1に形式的に対応する時系列ですが、以前の日付に開始し、通年の継続します(すなわち、365×48の30分間隔に対応する17520行)。それはこのように、基本的になります。

     Facility Servers PUE 
2016-10-01 00:00:00 NaN   NaN  NaN 
2016-10-01 00:30:00 NaN   NaN  NaN 
2016-10-01 01:00:00 NaN   NaN  NaN 
2016-10-01 01:30:00 NaN   NaN  NaN 
2016-10-01 02:00:00 NaN   NaN  NaN 
2016-10-01 02:30:00 NaN   NaN  NaN 
<continues to 17520 rows, i.e. one year of 30 minute time intervals> 

Iが適用されます、私は以下の取得DF3 = pd.concat([DFを、DF2])

してから実行しますdf3.head()を:つまり

     Facility Servers PUE 
2016-10-31 00:00:00 6.0   5.0  1.2 
2016-10-31 00:30:00 7.0   5.0  1.4 
2016-10-31 01:00:00 6.0   5.0  1.2 
2016-10-31 01:30:00 6.0   5.0  1.2 
2016-10-31 02:00:00 6.0   5.0  1.2 
2016-10-31 02:30:00 NaN   NaN  NaN 
2016-10-31 03:00:00 NaN   NaN  NaN 
2016-10-31 03:30:00 NaN   NaN  NaN 
<continues to the end of the year> 

は、コードがDFにデータの前に発生した時間間隔のためのNaNデータをすべて削除するようです。 df2にすべてのデータを保存する方法についてアドバイスします。dfの対応する時間間隔だけのデータで置き換えてください。

答えて

1

私はあなたの両方のindexesunionによってreindexが必要だと思う:彼らは左のデータフレームに不足している場合

print (df2.index.union(df.index)) 
DatetimeIndex(['2016-10-01 00:00:00', '2016-10-01 00:30:00', 
       '2016-10-01 01:00:00', '2016-10-01 01:30:00', 
       '2016-10-01 02:00:00', '2016-10-01 02:30:00', 
       '2016-10-31 00:00:00', '2016-10-31 00:30:00', 
       '2016-10-31 01:00:00', '2016-10-31 01:30:00', 
       '2016-10-31 02:00:00'], 
       dtype='datetime64[ns]', freq=None) 

df = df.reindex(df2.index.union(df.index)) 
print (df) 
        Facility Servers PUE 
2016-10-01 00:00:00  NaN  NaN NaN 
2016-10-01 00:30:00  NaN  NaN NaN 
2016-10-01 01:00:00  NaN  NaN NaN 
2016-10-01 01:30:00  NaN  NaN NaN 
2016-10-01 02:00:00  NaN  NaN NaN 
2016-10-01 02:30:00  NaN  NaN NaN 
2016-10-31 00:00:00  6.0  5.0 1.2 
2016-10-31 00:30:00  7.0  5.0 1.4 
2016-10-31 01:00:00  6.0  5.0 1.2 
2016-10-31 01:30:00  6.0  5.0 1.2 
2016-10-31 02:00:00  6.0  5.0 1.2 
+0

ありがとうございました。正確に私が必要としたもの。 – pottolom

1

使用combine_first

result = df1.combine_first(df2) 

結果は右のデータフレームから値をとります

+0

ありがとうございます。 – pottolom

関連する問題