Python 复制到新数据帧,但因缺少列而失败
我正在做foll。大熊猫: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_
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]
会导致错误。处理此问题的最佳方法是什么,即处理缺少或不缺少列的情况
pass
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缺失,但在其他一些数据帧中它会出现