2016-07-02 6 views
1

私はこの質問をもう一度聞いたことがありますが、問題を正しい方法で解決できなかったため削除しました。dropna()が期待どおりに動作しないのはなぜですか?

NaNを含むすべての行を削除します。私は、私が必要とするものを達成するために、私が適用する必要があると確信しています。

df.dropna(how='all', inplace=True) 

しかし、いくつかの未知の理由のために、それは単に動作しません。私はそれがソフトウェア/バージョン関連の問題であるという疑いを持っています。私はアナコンダとパンダ0.18.0とcondaバージョンcondaバージョンで働いています:4.1.2 conda-ビルドバージョン:1.19.0 Pythonのバージョン:3.5.1.final.0 要求バージョン:2.9.1

を私が軸= 1を使用する場合にも、何も行いません)

  60DAY_IMPVOL  Close 
Date 
2004-02-03  NaN   4057.510010 
2004-02-04  NaN   4028.370117 
2004-02-05  NaN   4014.790039 
2004-02-06  18.54   4044.989990 
2004-02-09  17.76   4098.970215 
2004-02-10  NaN   4077.635363 

とdropnaを適用する(または:

df1 = pd.read_csv('Vols.csv', sep=',', parse_dates=True, 
index_col="Date",usecols=['Date','60DAY_IMPVOL']) 
df2 = pd.read_csv('DAX02072016.csv', sep=',', index_col= "Date", parse_dates=True, 
usecols=['Date','Close']) 
df = pd.concat([df1, df2], axis=1) 

私は何を取得すると、データフレームである:私は、次のとcsvファイルからデータフレームを作成します軸= 0。だから誰も何の提案が働いていない理由になる可能性がありますか?

答えて

3

how='all'は、それが「すべて NaNである行をドロップ」を意味し、「はNaNを含んすべて行をドロップ」という意味ではありません。 how='any'が必要です。これは、 "any NaN"を含む行を削除することを意味します。

>>> df.dropna(how='all') 
      60DAY_IMPVOL  Close 
Date         
2004-02-03   NaN 4057.510010 
2004-02-04   NaN 4028.370117 
2004-02-05   NaN 4014.790039 
2004-02-06   18.54 4044.989990 
2004-02-09   17.76 4098.970215 
2004-02-10   NaN 4077.635363 
>>> df.dropna(how='any') 
      60DAY_IMPVOL  Close 
Date         
2004-02-06   18.54 4044.989990 
2004-02-09   17.76 4098.970215 

how='any'ので、正直に言うと、df.dropna()があまりにも働いているだろう、実際にはデフォルトです。私が見たときに

inplace=Trueが少し好意からであり、通常私たちは、これらの日df = df.dropna(how='any')を書きたいことに注意してください。)

+0

多くのおかげ@DSM、それが掲示、このような疑問を持つようにほんの少し恥ずかしいです答えで;) –

関連する問題