データを読む
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
実際に列を削除するには
渡された列が完全に一致する場合、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())
からの出力を見て、列のリストを出力し、先頭または末尾に空白があるかどうかを表示します。
df.drop(colname, axis=1)
(またはdel df[colname]
)は、列の削除に使用する正しい方法です。
ValueError
が発生する場合、列名があなたが思っている通りではないことを意味します。
df.columns
をチェックして、Pandasが列の名前であると考えるものを確認します。
pandasの列を削除する最良の方法は、 drop を使用することです。
df = df.drop('column_name', axis=1)
ここで、1
はaxis番号です(行の場合は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 に基づいて例外が発生し、このページの今後の訪問者を支援するためにここに残されます。