2016-01-09 85 views
5

私は次のようなデータセットを持っています。私は残りの部分を補間しようとしている月の最終日のデータしか持っていません、それを行う正しい方法ですか?補間のためにPython pandasデータフレームが欠損データを補間する

Date Australia China 
2011-01-01 NaN NaN 
2011-01-02 NaN NaN 
-   -  - 
-   -  - 
2011-01-31 4.75 5.81 
2011-02-01 NaN NaN 
2011-02-02 NaN NaN 
-   -  - 
-   -  - 
2011-02-28 4.75 5.81 
2011-03-01 NaN NaN 
2011-03-02 NaN NaN 
-   -  - 
-   -  - 
2011-03-31 4.75 6.06 
2011-04-01 NaN NaN 
2011-04-02 NaN NaN 
-   -  - 
-   -  - 
2011-04-30 4.75 6.06 

私は次のコード

import pandas as pd 
df = pd.read_csv("data.csv", index_col="Date") 
df.index = pd.DatetimeIndex(df.index) 
df.interpolate(method='linear', axis=0).ffill().bfill() 

しかし、私はエラーになっています使用してい行方不明NaN値を見つけるために、このデータフレーム「はTypeError:すべてのNaNを補間することはできませんが」

ここで間違っている可能性がありますが、これをどのように修正できますか?

ありがとうございました。

+0

エラーは完全にわかりやすいものです。あなたはこのhttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.htmlに基づいてNaNを落とすことで試すことができます – station

+0

こんにちは、助けていただきありがとうございます.NaNの代わりに何を記入してくださいそれらの行? – Unnikrishnan

+0

@Unnikrishnan良い答えはすでに与えられている、と私は思います。あなたのデータは非常に希薄ですので、実際にこのような巨大な量のデータを補間することは良い考えであるかどうか疑問に思うかもしれません。これらの価値がいくらか正しいと確信していますか? –

答えて

4

あなたはastypeによってdataframefloatに変換しようとすることができます

import pandas as pd 

df = pd.read_csv("data.csv", index_col=['Date'], parse_dates=['Date']) 

print df 

      Australia China 
Date       
2011-01-31  4.75 5.81 
2011-02-28  4.75 5.81 
2011-03-31  4.75 6.06 
2011-04-30  4.75 6.06 

df = df.reindex(pd.date_range("2011-01-01", "2011-10-31"), fill_value="NaN") 

#convert to float 
df = df.astype(float) 

df = df.interpolate(method='linear', axis=0).ffill().bfill() 
print df 

      Australia China 
2011-01-01  4.75 5.81 
2011-01-02  4.75 5.81 
2011-01-03  4.75 5.81 
2011-01-04  4.75 5.81 
2011-01-05  4.75 5.81 
2011-01-06  4.75 5.81 
2011-01-07  4.75 5.81 
2011-01-08  4.75 5.81 
2011-01-09  4.75 5.81 
2011-01-10  4.75 5.81 
2011-01-11  4.75 5.81 
2011-01-12  4.75 5.81 
2011-01-13  4.75 5.81 
2011-01-14  4.75 5.81 
2011-01-15  4.75 5.81 
2011-01-16  4.75 5.81 
2011-01-17  4.75 5.81 
2011-01-18  4.75 5.81 
2011-01-19  4.75 5.81 
2011-01-20  4.75 5.81 
2011-01-21  4.75 5.81 
2011-01-22  4.75 5.81 
2011-01-23  4.75 5.81 
2011-01-24  4.75 5.81 
2011-01-25  4.75 5.81 
2011-01-26  4.75 5.81 
2011-01-27  4.75 5.81 
2011-01-28  4.75 5.81 
2011-01-29  4.75 5.81 
2011-01-30  4.75 5.81 
...    ... ... 
2011-10-02  4.75 6.06 
2011-10-03  4.75 6.06 
2011-10-04  4.75 6.06 
2011-10-05  4.75 6.06 
2011-10-06  4.75 6.06 
2011-10-07  4.75 6.06 
2011-10-08  4.75 6.06 
2011-10-09  4.75 6.06 
2011-10-10  4.75 6.06 
2011-10-11  4.75 6.06 
2011-10-12  4.75 6.06 
2011-10-13  4.75 6.06 
2011-10-14  4.75 6.06 
2011-10-15  4.75 6.06 
2011-10-16  4.75 6.06 
2011-10-17  4.75 6.06 
2011-10-18  4.75 6.06 
2011-10-19  4.75 6.06 
2011-10-20  4.75 6.06 
2011-10-21  4.75 6.06 
2011-10-22  4.75 6.06 
2011-10-23  4.75 6.06 
2011-10-24  4.75 6.06 
2011-10-25  4.75 6.06 
2011-10-26  4.75 6.06 
2011-10-27  4.75 6.06 
2011-10-28  4.75 6.06 
2011-10-29  4.75 6.06 
2011-10-30  4.75 6.06 
2011-10-31  4.75 6.06 

[304 rows x 2 columns] 

そして、あなたはffill()を省略することができ、NaNdataframeの最初の行にのみあるため:

df = df.interpolate(method='linear', axis=0).ffill().bfill() 

to:

df = df.interpolate(method='linear', axis=0).bfill() 
+0

ありがとう、期待どおりに働いています! – Unnikrishnan

1

補間する前にデータセットからNaNを削除することができます。

import pandas as pd 
df = pd.read_csv("data.csv", index_col="Date") 
df = df.dropna() 
df.index = pd.DatetimeIndex(df.index) 
df.interpolate(method='linear', axis=0).ffill().bfill() 
+0

これらのNaN行はCSVではありませんでした。コードdf = df.reindex(pd.date_range( "2011-01-01"、 "2011-10-31")、fill_value = np.nan)を使用して追加しました。どのようにそれらの行を埋めることができますか? – Unnikrishnan

関連する問題