web-dev-qa-db-ja.com

パンダで数値列を見つけるにはどうすればよいですか?

dfがpandas DataFrameであるとしましょう。数値型のすべての列を検索したいです。何かのようなもの:

isNumeric = is_numeric(df)
90

DataFrameのselect_dtypesメソッドを使用できます。 includeとexcludeの2つのパラメーターが含まれます。 isNumericは次のようになります。

numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']

newdf = df.select_dtypes(include=numerics)
108
Anand

文書化されていない関数_get_numeric_data()を使用して、数値列のみをフィルタリングできます。

df._get_numeric_data()

例:

In [32]: data
Out[32]:
   A  B
0  1  s
1  2  s
2  3  s
3  4  s

In [33]: data._get_numeric_data()
Out[33]:
   A
0  1
1  2
2  3
3  4

これは「プライベートメソッド」(つまり、実装の詳細)であり、将来変更または完全に削除される可能性があることに注意してください。 注意して使用

58

数値列のみで新しいデータフレームを作成する簡単な1行の回答:

df.select_dtypes(include=[np.number])

数値列の名前が必要な場合:

df.select_dtypes(include=[np.number]).columns.tolist()

完全なコード:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': range(7, 10),
                   'B': np.random.Rand(3),
                   'C': ['foo','bar','baz'],
                   'D': ['who','what','when']})
df
#    A         B    C     D
# 0  7  0.704021  foo   who
# 1  8  0.264025  bar  what
# 2  9  0.230671  baz  when

df_numerics_only = df.select_dtypes(include=[np.number])
df_numerics_only
#    A         B
# 0  7  0.704021
# 1  8  0.264025
# 2  9  0.230671

colnames_numerics_only = df.select_dtypes(include=[np.number]).columns.tolist()
colnames_numerics_only
# ['A', 'B']
41
df.select_dtypes(exclude=['object'])
23
WeNYoBen
def is_type(df, baseType):
    import numpy as np
    import pandas as pd
    test = [issubclass(np.dtype(d).type, baseType) for d in df.dtypes]
    return pd.DataFrame(data = test, index = df.columns, columns = ["test"])
def is_float(df):
    import numpy as np
    return is_type(df, np.float)
def is_number(df):
    import numpy as np
    return is_type(df, np.number)
def is_integer(df):
    import numpy as np
    return is_type(df, np.integer)
2

適応 この答え 、あなたはできる

df.ix[:,df.applymap(np.isreal).all(axis=0)]

ここで、np.applymap(np.isreal)は、データフレームのすべてのセルが数値であるかどうかを示し、.axis(all=0)は、列のすべての値がTrueであるかどうかを確認し、目的の列のインデックス付けに使用できる一連のブール値を返します。

2
Garrett

これは、pandasデータフレームで数値列を見つけるための別の簡単なコードです。

      numeric_clmns = df.dtypes[df.dtypes != "object"].index 
2
Anvesh_vs

以下のコードをご覧ください:

if(dataset.select_dtypes(include=[np.number]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.number]).describe())
if(dataset.select_dtypes(include=[np.object]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.object]).describe())

これにより、値がfloatやintなどの数値であるか、srting値であるかを確認できます。 2番目のifステートメントは、オブジェクトによって参照される文字列値をチェックするために使用されます。

1
mickey

次のコードは、データセットの数値列の名前のリストを返します。

cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)

ここでmarketing_trainは私のデータセットであり、select_dtypes()はexcludeおよびinclude引数を使用してデータ型を選択する関数であり、列は上記のコードのデータセット出力の列名を取得するために使用されます:['custAge'、 'campaign'、 「pdays」、「previous」、「emp.var.rate」、「cons.price.idx」、「cons.conf.idx」、「euribor3m」、「nr.employed」、「pmonths」、「pastEmail」]

ありがとう

1
Hukmaram