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