根据列名删除列

时间:2019-11-05 01:08:15

标签: python dataframe

我有一个带有列名称的数据框,例如 id_1 id_2 id_3 ty io io

我想使用sql中的类似条件从数据框中删除列;删除“ id%”之类的列,并通过提及它们的位置来删除它们; delete [6]即io列

2 个答案:

答案 0 :(得分:0)

您可以使用df.filter根据regex过滤列,然后从原始数据框中删除这些列。

df.drop(columns = df.filter(regex='id_[0-9]+', axis=1).columns)

要按位置删除列,只需执行

df.drop(df.columns[index], axis=1)

答案 1 :(得分:0)

您可以使用以下方法解决您的问题:

import pandas as pd
import numpy as np

# initialize sample dataframe
df = pd.DataFrame(data=np.nan, index=range(3), columns=['id1', 'id2', 'col3','id4', 'col5'])
print(df)
#    id1  id2  col3  id4  col5
# 0  NaN  NaN   NaN  NaN   NaN
# 1  NaN  NaN   NaN  NaN   NaN
# 2  NaN  NaN   NaN  NaN   NaN

# filter by begining of the column name
df_filtered_by_id = df.loc[:, df.columns.str.startswith('id')]
print(df_filtered_by_id)
#    id1  id2  id4
# 0  NaN  NaN  NaN
# 1  NaN  NaN  NaN
# 2  NaN  NaN  NaN

# filter by positional indices of columns
indexes = [2, 4]
df_filtered_by_index = df.iloc[:, indexes]
print(df_filtered_by_index)
#    col3  col5
# 0   NaN   NaN
# 1   NaN   NaN
# 2   NaN   NaN

更新

如果您要同时使用范围和独立索引,可以执行以下操作:

import itertools

indices = [0, 2, range(3, 5)]
indices_flattened = list(itertools.chain(*map(lambda x: [elem for elem in x] if isinstance(x, range) else [x], indices)))
df_filtered_by_combined_types = df.iloc[:, indices_flattened]
print(df_filtered_by_combined_types)
#    id1  col3  id4  col5
# 0  NaN   NaN  NaN   NaN
# 1  NaN   NaN  NaN   NaN
# 2  NaN   NaN  NaN   NaN