33

Python 2.7.3 と Pandas バージョン 0.12.0 を使用しています。

有効な site_id 値のみを持つように、NaN インデックスを持つ行を削除したいと考えています。

print df.head()
            special_name
site_id
NaN          Banana
OMG          Apple

df.drop(df.index[0])

TypeError: 'NoneType' object is not iterable

次のように、範囲を削除しようとすると:

df.drop(df.index[0:1])

次のエラーが表示されます。

AttributeError: 'DataFrame' object has no attribute 'special_name'
4

6 に答える 6

19

最も簡単な方法は、インデックスをリセットし、NaN を削除してから、インデックスを再度リセットすることです。

In [26]: dfA.reset_index()
Out[26]: 
  index special_name
0   NaN        Apple
1   OMG       Banana

In [30]: df = dfA.reset_index().dropna().set_index('index')

In [31]: df
Out[31]: 
      special_name
index             
OMG         Banana
于 2013-10-29T23:57:13.617 に答える
4

私にとって100%うまくいった答えはありませんでした。うまくいったのは次のとおりです。

In [26]: print df
Out[26]:            
          site_id      special_name
0         OMG          Apple
1         NaN          Banana
2         RLY          Orange


In [27]: df.dropna(inplace=True)
Out[27]:            
          site_id      special_name
0         OMG          Apple
2         RLY          Orange

In [28]: df.reset_index(inplace=True)
Out[28]:            
          index     site_id      special_name
0         0         OMG          Apple
1         2         RLY          Orange

In [29]: df.drop('index', axis='columns', inplace=True)
Out[29]:             
          site_id      special_name
0         OMG          Apple
1         RLY          Orange
于 2016-10-21T16:14:07.923 に答える
4

pandas0.19の時点で、 Indexes には.notnull()メソッドがあるため、timdielsによる回答は次のように簡略化できます。

df[df.index.notnull()]

これは(現在)入手できる最も単純なものだと思います。

于 2017-03-30T13:34:57.470 に答える
2

編集:以下はおそらく s にのみ適用されMultiIndex、いずれにしても新しいdf.index.isnull()関数によって廃止されました(他の回答を参照)。この回答は、歴史的な関心のために残します。

これにたどり着いた人は、インデックス内の NaN が label で表されるという事実に依存することで、インデックスを再作成せずに直接これを行うことができます-1。そう:

df = dfA[dfA.index.labels!=-1]

さらに良いことに、Pandas>0.16.1 では、drop() を使用して、コピーせずにインプレースでこれを行うことができます。

dfA.drop(labels=[-1], level='index', inplace=True)

注: インデックス レベルが「index」と呼ばれるのは少し誤解を招く可能性があります。通常は、「date」や「​​experimental_run」など、より用途に特化したものになります。

于 2015-07-31T08:40:51.583 に答える