选择/排除pandas中的一组列
选择/排除pandas中的一组列
这个问题已经有了答案:
我想基于列选择从现有的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日
现在有一个名为difference
的新索引方法。它返回原始列,将作为参数传递的列删除。
在这里,结果用于从df
中删除列B
和D
:
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)