根据列名删除 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】:将regex
与filter
一起使用:
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 数据框列的主要内容,如果未能解决你的问题,请参考以下文章