web-dev-qa-db-ja.com

パンダでデータフレームから列を削除する方法は?

データを読む

import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df

取得:

          id    text
0    361.273    text1...
1    374.350    text2...
2    374.350    text3...

上記のデータフレームからid列を削除するにはどうすればよいですか。私は次を試しました:

import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df.drop('id', 1)

ただし、この例外が発生します。

ValueError: labels ['id'] not contained in axis
42
newWithPython

実際に列を削除するには

渡された列が完全に一致する場合、del df['id']またはdf.drop('id', 1)は機能するはずです。

ただし、列を削除する必要がない場合は、次のように目的の列を選択するだけです。

In [54]:

df['text']
Out[54]:
0    text1
1    text2
2    textn
Name: text, dtype: object

そもそもそれが必要ない場合は、colsのリストをread_csvにparam usecolsとして渡します:

In [53]:
import io
temp="""id    text
363.327    text1
366.356    text2
37782    textn"""
df = pd.read_csv(io.StringIO(temp), delimiter='\s+', usecols=['text'])
df
Out[53]:
    text
0  text1
1  text2
2  textn

エラーについては、'id'が列にないか、スペルが異なるか、空白が含まれているためです。これを確認するには、print(df.columns.tolist())からの出力を見て、列のリストを出力し、先頭または末尾に空白があるかどうかを表示します。

15
EdChum

df.drop(colname, axis=1)(またはdel df[colname])は、列の削除に使用する正しい方法です。

ValueErrorが発生する場合、列名があなたが思っている通りではないことを意味します。

df.columnsをチェックして、Pandasが列の名前であると考えるものを確認します。

53
unutbu

pandasの列を削除する最良の方法は、 drop を使用することです。

df = df.drop('column_name', axis=1)

ここで、1axis番号です(行の場合は0、列の場合は1)。

dfを再割り当てすることなく列を削除するには、次のようにします。

df.drop('column_name', axis=1, inplace=True)

最後に、列labelではなく列numberでドロップするには、試してくださいこの。削除するには、例えば1列目、2列目、および4列目:

df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 


例外:

間違った列番号またはラベルが要求された場合、エラーがスローされます。列の数を確認するにはdf.shape[1]またはlen(df.columns.values)を使用し、列のラベルを確認するにはdf.columns.valuesを使用します。

@LondonRobの answer に基づいて例外が発生し、このページの今後の訪問者を支援するためにここに残されます。

33
borgr