Python 复制到新数据帧,但因缺少列而失败

Python 复制到新数据帧,但因缺少列而失败,python,pandas,Python,Pandas,我正在做foll。大熊猫: all_df = pd.DataFrame() all_df[self.FAO_code] = per_df[self.FAO_code] all_df[self.ISO_code] = per_df[self.ISO_code] all_df[self.cft_id] = per_df[self.cft_id] all_df[self.cft_type] = per_df[self.cft_type] 在某些情况下,per_

我正在做foll。大熊猫:

    all_df = pd.DataFrame()
    all_df[self.FAO_code] = per_df[self.FAO_code]
    all_df[self.ISO_code] = per_df[self.ISO_code]
    all_df[self.cft_id] = per_df[self.cft_id]
    all_df[self.cft_type] = per_df[self.cft_type]
在某些情况下,per_df中缺少self.cft_id列。在这种情况下,
all_df[self.cft\u id]=per_df[self.cft\u id]
会导致错误。处理此问题的最佳方法是什么,即处理缺少或不缺少列的情况

  • 裹上试试看。在except子句中,只需
    pass
  • 还有别的办法吗

    编辑

    per_df的一部分:

       ISO  Country_FAO       funct_type    Y1961    Y1962    Y1963    Y1964 
    0    4  Albania             C3annual  3058729  3183956  3214308  3233208   
    1    4  Albania          C3perennial    99999   100000   100000   105000   
    2    4  Albania             C4annual   523500   524500   525500   531500   
    3    4  Albania          C4perennial     1800     1800     1800     1800   
    4    4  Albania             N-fixing    20500    21000    22500    22500 
    
    你也可以这样做:

    for col in [self.FAO_code, ..., self.cft_type]:
        if col in per_df.columns:
            all_df[col] = per_df.loc[:, col]
    

    您可以使用
    filter
    方法。它将忽略不存在的列:

    all_df = per_df.filter([self.FAO_code, self.ISO_code, self.cft_id, self.cft_type])
    

    谢谢@Stefan,你为什么用
    all_-df.loc[:,col]=per_-df.loc[:,col]
    而不是
    all_-df.[col]=per_-df[col]
    ?刚刚更新。假设您正在创建新列。上一个选择不会从per_df中获取列,而是一个行索引。您可以显示部分数据帧吗?根据@AntonProtopopovovso的请求编辑该数据帧中的self.cft_id是什么?self.cft_id缺失,但在其他一些数据帧中它会出现