在无法假设数据框的列存在的情况下,我经常发现自己实现了一种“也许获取列,否则填充默认值”的方法。想知道是否还有比这更Pandas Idiomatic的风格?
df.get("column", default=pd.Series([dfl_value] * df.shape[0]))
没有,但如果你必须经常这样做,你可以创建一个自定义的 pandas 方法:
from pandas.core.base import PandasObject
def get_col(df, col, default=None):
if col in df:
return df.get(col)
return pd.Series([default]*len(df),
index=df.index,
name=col,
)
PandasObject.get_col = get_col
注意。如果不需要,请使用
try
/except
来避免构建默认的 Series
。
然后使用
get_col
:
df = pd.DataFrame({'col': [1, 2, 3]})
df.get_col('col', default=999)
# 0 1
# 1 2
# 2 3
# Name: col, dtype: int64
df.get_col('col2', default=999)
# 0 999
# 1 999
# 2 999
# Name: col2, dtype: int64