以幂等方式删除 Pandas 数据帧列的惯用方法(没有设置错误 = "ignore" )



是否有更Pythonic或pandas惯用的方法来删除DataFrame列而不只是设置errors="ignore"?

假设我有以下DataFrame:

import pandas as pd
from pandas import DataFrame
df_initial: DataFrame = pd.DataFrame([
{
"country": "DE",
"price": 1,
"quantity": 10
}
])

如果我不确定何时可以调用一个丢弃列的函数(我在Jupyter Notebook的上下文中思考),是否有一种方法可以做到不只是忽略错误(如下所示)?

df_country_dropped = df_initial.drop("country", axis=1, errors="ignore")

也许我太挑剔了,但我希望有一种更python化的方法来处理这个问题,而不仅仅是忽略KeyError

我意识到在删除之前可以检查列是否存在:

def drop_country_if_exists(df):
if "country" in df:
return df.drop("country", axis=1)
df_country_dropped = drop_country_if_exists(df_initial)

但我希望可能有一个更优雅的方式!

如果您试图避免创建额外函数的开销,我认为列表推导式是实现您所需的一种python方式。

这样的方法是幂等的,并且足够优雅:

df[[col for col in df.columns if col != 'country']]

这个方法的好处是,如果你想删除列列表,通过将!=更改为not in并传递列名列表,它很容易扩展。

最新更新