Skip to main content
 首页 » 编程设计

python之如果数据框中不存在列,则返回空列

2025年05月04日15zhujiabin

我创建了一个数据框 df 如下:

Type = ['A', 'B', 'C', 'D'] 
Size = [72,23,66,12] 
df = pd.DataFrame({'Type': Type, 'Size': Size}) 

我可以使用以下方法提取任何现有列:

df_count = df['Size'] 

但是,如果数据框太大,我不知道该列是否存在于 df 中。在这种情况下,如果我调用一个专栏,例如df['Shape']如下:

df_null = df['Shape'] 

它引发了一个KeyError。但是我希望 df_null 应该得到一个名为 "Shape" 的空列。

请您参考如下方法:

使用DataFrame.get模式类似于:

In [3]: df.get('Size', pd.Series(index=df.index, name='Size')) 
Out[3]: 
0    72 
1    23 
2    66 
3    12 
Name: Size, dtype: int64 
 
In [4]: df.get('Shape', pd.Series(index=df.index, name='Shape')) 
Out[4]: 
0   NaN 
1   NaN 
2   NaN 
3   NaN 
Name: Shape, dtype: float64 

或者通过创建一个抽象函数来概括:

In [5]: get_column = lambda df, col: df.get(col, pd.Series(index=df.index, name=col)) 
 
In [6]: get_column(df, 'Size') 
Out[6]: 
0    72 
1    23 
2    66 
3    12 
Name: Size, dtype: int64 
 
In [7]: get_column(df, 'Shape') 
Out[7]: 
0   NaN 
1   NaN 
2   NaN 
3   NaN 
Name: Shape, dtype: float64 

另一种选择是使用 reindex和 squeeze :

In [8]: df.reindex(columns=['Size']).squeeze() 
Out[8]: 
0    72 
1    23 
2    66 
3    12 
Name: Size, dtype: int64 
 
In [9]: df.reindex(columns=['Shape']).squeeze() 
Out[9]: 
0   NaN 
1   NaN 
2   NaN 
3   NaN 
Name: Shape, dtype: float64