2017-08-23 5 views
1

異なるデータ型のPandas dfがある場合、df.select_dtypesは、特定のアプリケーションで望ましくない列を保持したり、不要な列を取り除くのに非常に役立ちます。pandas df(df.select_dtypesに相当)の文字列を選択する

しかし、この方法を使用してstring dtypesに対処する方法はないようです。 the docsから

(強調鉱山):

とValueErrorの両方が含まれ、除外
    あらゆる種類の場合は、重複要素を包含および除外している場合
   を空の場合
   文字列dtypeが渡されます。

は、それがあるものの df.select_dtypes(exclude=['str'])が(エラーが発生します使用して、あなたがオブジェクトDTYPEを使用しますが、これは すべてオブジェクトDTYPE列

実際

を返すことに注意しなければならない文字列を選択するにはTypeErrorであり、ValueErrorはドキュメントの主張ではありません)、df.select_dtypes(exclude=['object'])を使用すると、string列だけでなく、すべてobject列が削除されます。

df = pd.DataFrame({'int_col':[0,1,2,3,4], 
        'dict_col':[dict() for i in range(5)], 
        'str_col':list('abcde')}) 

df.dtypes 

str_coldict_colの両方にobjectであることを考慮:


除くかの最良の方法は何ですか、このようなdf考える


すべてのストリンを含むg列? df.applymaptype、及び等化を使用


答えて

1

オプション1

strに:

In [377]: (df.applymap(type) == str).all(0) 
Out[377]: 
dict_col False 
int_col  False 
str_col  True 
dtype: bool 

各列の各要素は、その型に変換された後strに等しく。その後、.all(0)または.min(0)を呼び出して、列ごとの判定を取得してください。df.applymapisinstanceを使用して


オプション2

In [342]: df.applymap(lambda x: isinstance(x, str)).all(0) 
Out[342]: 
dict_col False 
int_col  False 
str_col  True 

をこれらの文字列の列を含めるには、列にインデックスをブールすることができます

idx = ... # one of the two methods above 
df_new = df[df.columns[idx]] 

除外が

df_new = df[df.columns[~idx]] 
+1

いいだろう、ありがとう!完全性のために、文字列を実際にインクルードするか除外するかは 'df.loc [:、(df.applymap(type)== str).all(0)]'と 'df.loc [:, (df.applymap(type)!= str).all(0)] 'となります。 – WhoIsJack

+1

@WhoIsJack That、または列のインデックス(私の答えに追加)。 –

関連する問題