2017-02-16 5 views
3

pandas.DataFrame.popのドキュメントが見つかりましたが、試してみてsource codeを調べたところ、私がしたいことをしていないようです。データフレームから行をポップする方法は?

私はこのようなデータフレームを作る場合:このように、

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randn(10,6)) 
# Make a few areas have NaN values 
df.iloc[1:3,1] = np.nan 
df.iloc[5,3] = np.nan 
df.iloc[7:9,5] = np.nan 


>>> df 
      0   1   2   3   4   5 
0 0.772762 -0.442657 1.245988 1.102018 -0.740836 1.685598 
1 -0.387922  NaN -1.215723 -0.106875 0.499110 0.338759 
2 0.567631  NaN -0.353032 -0.099011 -0.698925 -1.348966 
3 1.320849 1.084405 -1.296177 0.681111 -1.941855 -0.950346 
4 -0.026818 -1.933629 -0.693964 1.116673 0.392217 1.280808 
5 -1.249192 -0.035932 -1.330916  NaN -0.135720 -0.506016 
6 0.406344 1.416579 0.122019 0.648851 -0.305359 -1.253580 
7 -0.092440 -0.243593 0.468463 -1.689485 0.667804  NaN 
8 -0.110819 -0.627777 -0.302116 0.630068 2.567923  NaN 
9 1.884069 -0.393420 -0.950275 0.151182 -1.122764 0.502117 

私は、選択した行を削除し、ワンステップで別のオブジェクトに割り当てたい場合は、私はpop行動をしたいと思う:

# rows in column 5 which have NaN values 
>>> df[df[5].isnull()].index 
Int64Index([7, 8], dtype='int64') 

# remove them from the dataframe, assign them to a separate object 
>>> nan_rows = df.pop(df[df[5].isnull()].index) 

ただし、これはサポートされていないようです。代わりに、私は2つの別々のステップでこれをやらなければならないようです。

# get the NaN rows 
>>> nan_rows = df[df[5].isnull()] 

>>> nan_rows 
      0   1   2   3   4 5 
7 -0.092440 -0.243593 0.468463 -1.689485 0.667804 NaN 
8 -0.110819 -0.627777 -0.302116 0.630068 2.567923 NaN 

# remove from orignal df 
>>> df = df.drop(nan_rows.index) 

>>> df 
      0   1   2   3   4   5 
0 0.772762 -0.442657 1.245988 1.102018 -0.740836 1.685598 
1 -0.387922  NaN -1.215723 -0.106875 0.499110 0.338759 
2 0.567631  NaN -0.353032 -0.099011 -0.698925 -1.348966 
3 1.320849 1.084405 -1.296177 0.681111 -1.941855 -0.950346 
4 -0.026818 -1.933629 -0.693964 1.116673 0.392217 1.280808 
5 -1.249192 -0.035932 -1.330916  NaN -0.135720 -0.506016 
6 0.406344 1.416579 0.122019 0.648851 -0.305359 -1.253580 
9 1.884069 -0.393420 -0.950275 0.151182 -1.122764 0.502117 

ワンステップ方式が組み込まれていますか?それとも、これはあなたがそれをやろうとしているのでしょうか?

+1

この質問に回答しました:https://stackoverflow.com/questions/39263411/pandas-pop-last-row –

+0

[Pandas pop last row](https://stackoverflow.com/questions/39263411)の可能な複製/ pandas-pop-last-row) – C8H10N4O2

答えて

1

ポップのソースコード:itemは単純な列名でない場合

def pop(self, item): 
     """ 
     Return item and drop from frame. Raise KeyError if not found. 
     """ 
     result = self[item] 
     del self[item] 
     try: 
      result._reset_cacher() 
     except AttributeError: 
      pass 

     return result 
File:  c:\python\lib\site-packages\pandas\core\generic.py 

delは間違いなく動作しません。単純な列名を渡すか、2つのステップで実行します。

+0

はい、それは私がOPで投稿したものが意味するものです。 'pop'は行ではなく、ここの列でのみ動作します。 – user5359531

+0

それであなたは何を期待していますか?それはGHではありません:-) – Boud

+0

GHとは分かりません。私がまだ見つけていないこのためのワンステップ方法があるように思えました。 – user5359531

関連する問題