53

私のアプリケーションでは、次のように構造化されたテキストファイルをロードします。

  • 最初の非数値列(ID)
  • 数値以外の列(文字列)の数
  • 数値列の数(浮動小数点数)

非数値列の数は可変です。現在、次のようにデータをDataFrameにロードしています。

source = pandas.read_table(inputfile, index_col=0)

名前やインデックスを知らずに、数値以外のすべての列を一挙に削除したいと思います。これは、dtypeを読み取ることができる可能性があるためです。これはパンダで可能ですか、それとも自分で何かを調理する必要がありますか?

4

4 に答える 4

63

プライベートメソッドの使用を回避するために、 select_dtypesを使用することもできます。この場合、必要なdtypeを含めるか除外することができます。

まったく同じことについて、この投稿でそれに遭遇しました。

またはあなたの場合、具体的には:
source.select_dtypes(['number']) or source.select_dtypes([np.number]

于 2015-09-04T13:55:33.357 に答える
49

これはプライベートメソッドですが、トリックを実行します:source._get_numeric_data()

In [2]: import pandas as pd

In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]})

In [4]: source
Out[4]:
     A  B       C
0  foo  1  (1, 2)
1  bar  2  (3, 4)

In [5]: source._get_numeric_data()
Out[5]:
   B
0  1
1  2
于 2012-10-04T11:41:00.773 に答える
0

また、2行のコードでカテゴリ値の列を削除し、カテゴリ値の列(1行目)でリストを定義し、2行目でそれらを削除するための別の可能な解決策があります。dfはDataFrameです

ドロップする前のdf: ドロップする前のdf

  to_be_dropped=pd.DataFrame(df.categorical).columns
  df= df.drop(to_be_dropped,axis=1)

ドロップ後のdf: ドロップ後のdf

于 2018-08-03T12:12:20.427 に答える
0

これにより、float64数値を含まない各列が削除されます。

df = pd.read_csv('sample.csv', index_col=0)
non_floats = []
for col in df:
    if df[col].dtypes != "float64":
        non_floats.append(col)
df = df.drop(columns=non_floats)
于 2019-03-03T11:43:50.070 に答える