大熊猫复制指数

时间:2018-08-01 07:24:17

标签: python pandas

我具有选择熊猫数据框的列的功能:

df = pd.DataFrame ({'abc':[1,2], 'xyz':[3,4], 'def':[5,6]})

def select_columns (df):
  res = df[df.columns.drop(list(df.filter(regex='abc')))]
  res = res[res.columns.drop(list(res.filter(regex='xyz')))]
  return res

但是,我意识到返回res中有一个名为Unnamed: 0的新列,它实际上是旧的索引列,而res自动有另一个新的索引列。 / p>

在删除某些列时如何让索引列保持不变?

谢谢

1 个答案:

答案 0 :(得分:0)

在删除列而不指定索引的同时,您正在重新分配DataFrame。您可以通过简单地删除以下列来避免这种情况:

def select_columns(df):
    res = df.drop(columns=df.filter(regex='abc').columns)
    res = res.drop(columns=res.filter(regex='xyz').columns)
    return res

您还可以在函数中坚持使用变量名df,因为默认情况下,删除列将创建DataFrame的副本。因此,没有改变您的“外部” DataFrame的危险。 如果您确实要就地完成并修改外部DataFrame,则可以执行以下操作:

def select_columns_inplace(df):
    df.drop(columns=df.filter(regex='abc').columns, inplace=True)
    df.drop(columns=df.filter(regex='xyz').columns, inplace=True)
    return None

要将两行regex放在同一行中,可以使用|OR)运算符:

def select_columns(df):
    return df.drop(columns=df.filter(regex='abc|xyz').columns)

这当然也适用于就地操作。