根据列名删除 Pandas 数据框列

Posted

技术标签:

【中文标题】根据列名删除 Pandas 数据框列【英文标题】:Dropping Pandas Dataframe Columns based on column name 【发布时间】:2021-12-06 01:54:27 【问题描述】:

我有一个带有无关信息的 Pandas 数据框 df。无关信息存储在名称包含“PM”的列中。我想删除这些列,但我不知道该怎么做。下面是我的尝试。但是,我收到此错误消息:AttributeError: 'numpy.float64' object has no attribute 'PM'。我不确定如何解释此错误消息。我也不明白为什么消息中提到了 numpy,因为数据框 df 是 pandas 对象。

for j in range(0,len(df.columns)-1):
 df.iloc[0,j].str.contains("PM"):
   df.drop(j, axis=1)

AttributeError: 'numpy.float64' 对象没有属性 'PM'

【问题讨论】:

你能添加一些小数据样本,3列,3行吗? 【参考方案1】:

根据我的理解,您想删除列,所以最初您应该将所有列名存储在一个列表中。接下来从列表中删除所有不包含 PM 的元素。

columns = list(df.columns.values)
columns = [col for col in columns if 'PM' in col]
df.drop(columns=columns, axis=1, inplace=True)

【讨论】:

在迭代列表时小心删除列表的元素,这通常会导致不正确的结果,尤其是在应该删除两个连续元素时。 是的,感谢您指出。【参考方案2】:

regexfilter 一起使用:

df.filter(regex='^((?!PM).)*$')

这是这里最短的解决方案。

【讨论】:

@jezrael 没时间。编辑了它【参考方案3】:

使用空数据框

df = pd.DataFrame(columns=['a','b','ABCPMYXZ','QWEPMQWE','c','d'])
df
df = df[[i for i in df.columns if not 'PM' in i]]
df

【讨论】:

以上是关于根据列名删除 Pandas 数据框列的主要内容,如果未能解决你的问题,请参考以下文章

如何自动命名 Pandas 数据框列?

从 Pandas 数据框列中删除“秒”和“分钟”

Pandas df.itertuples 在打印时重命名数据框列

根据数据类型获取 pandas 数据框列的列表

从 pandas 数据框列中的对象中删除逗号

python [数据框添加或删除列]一些表达式来修改数据框列#Pandas