我有一个带有列名称的数据框,例如 id_1 id_2 id_3 ty io io
我想使用sql中的类似条件从数据框中删除列;删除“ id%”之类的列,并通过提及它们的位置来删除它们; delete [6]即io列
答案 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