根据列名删除列

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

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

ewilliams 回答:根据列名删除列

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

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

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

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

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

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
本文链接:https://www.f2er.com/3162894.html

大家都在问