选择/排除pandas中的一组列

22 浏览
0 Comments

选择/排除pandas中的一组列

这个问题已经有了答案

从Pandas DataFrame中删除列

我想基于列选择从现有的dataframe创建视图或数据帧。

例如,我想从一个名为df1的dataframe中创建一个名为df2的数据帧,保留除其中两列之外的所有列。我尝试了以下操作,但它没有起作用:

import numpy as np
import pandas as pd
# Create a dataframe with columns A,B,C and D
df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))
# Try to create a second dataframe df2 from df with all columns except 'B' and D
my_cols = set(df.columns)
my_cols.remove('B').remove('D')
# This returns an error ("unhashable type: set")
df2 = df[my_cols]

我做错了什么?或许更普遍地说,pandas有哪些机制来支持从dataframe中选择和排除任意一组列?

admin 更改状态以发布 2023年5月21日
0
0 Comments

现在有一个名为difference的新索引方法。它返回原始列,将作为参数传递的列删除。

在这里,结果用于从df中删除列BD

df2 = df[df.columns.difference(['B', 'D'])]

请注意,它是基于集合的方法,因此重复的列名会引起问题,并且列顺序可能会改变。


difference相对于drop优势:当您仅需要列列表时,您不会创建整个数据框的副本。例如,为了在一组列上删除重复项:

# may create a copy of the dataframe
subset = df.drop(['B', 'D'], axis=1).columns
# does not create a copy the dataframe
subset = df.columns.difference(['B', 'D'])
df = df.drop_duplicates(subset=subset)

0
0 Comments

\n\n您可以要么删除您不需要的列,要么选择您需要的列。 \n

# Using DataFrame.drop
df.drop(df.columns[[1, 2]], axis=1, inplace=True)
# drop by Name
df1 = df1.drop(['B', 'C'], axis=1)
# Select the ones you want
df1 = df[['a','d']]

0