Skip to main content
 首页 » 编程设计

python之多个部分应用变量后,如何避免Python混淆代码

2025年05月04日10java哥

我有这个数据框:

FamilyVsWWTotal = pd.DataFrame({'date':['2011-4-3','2011-3-5','2011-4-3','2011-5-7'], 'Country':['USA','CAN','USA','MEX']}) 

所以它会有如下输出:

date          Country 
2011-4-3      USA 
2011-3-5      CAN 
2011-4-3      USA 
2011-5-7      MEX 

然后下面的代码是 2 创建表 1:

 Table1=FamilyVsWWTotal 
 Table1['Region']='K' 

因此 Table1 将具有以下输出:

date          Country   Region 
2011-4-3      USA       K 
2011-3-5      CAN       K 
2011-4-3      USA       K 
2011-5-7      MEX       K 

对于第二个表,即 Table2:

Table2=FamilyVsWWTotal 
Table2['aveAge']=60 

因此 Table2 的输出应该是这样的:

date          Country   aveAge 
2011-4-3      USA       60 
2011-3-5      CAN       60 
2011-4-3      USA       60 
2011-5-7      MEX       60 

但我总是遇到这个问题,即 Table2 输出看起来像这样,它已经混淆了上面的代码:

表2

date          Country   Region   aveAge 
2011-4-3      USA       K        60 
2011-3-5      CAN       K        60 
2011-4-3      USA       K        60 
2011-5-7      MEX       K        60 

任何人都可以提供一些解决此问题的想法?

请您参考如下方法:

你需要copy对于新的 DataFrame 对象,因为其他使用相同的对象(没有复制不是按值复制,而是创建一个新的 reference,所以 id 相同):

Table1=FamilyVsWWTotal.copy() 
 
print (id(Table1)) 
243907608 
print (id(FamilyVsWWTotal)) 
193392088 
#crete new object (unlink to original df) 
Table1 = FamilyVsWWTotal.copy() 
Table2=FamilyVsWWTotal.copy() 
Table1['Region'] = 'K' 
Table2['aveAge']=60 
print (FamilyVsWWTotal) 
  Country      date 
0     USA  2011-4-3 
1     CAN  2011-3-5 
2     USA  2011-4-3 
3     MEX  2011-5-7 
 
print (Table1) 
  Country      date Region 
0     USA  2011-4-3      K 
1     CAN  2011-3-5      K 
2     USA  2011-4-3      K 
3     MEX  2011-5-7      K 
 
print (Table2) 
  Country      date  aveAge 
0     USA  2011-4-3      60 
1     CAN  2011-3-5      60 
2     USA  2011-4-3      60 
3     MEX  2011-5-7      60 

#create refernce only 
Table1=FamilyVsWWTotal 
 
print (id(Table1)) 
244095352 
print (id(FamilyVsWWTotal)) 
244095352 

仍然修改原始DataFrame FamilyVsWWTotal:

Table1 = FamilyVsWWTotal 
Table2=FamilyVsWWTotal 
Table1['Region'] = 'K' 
Table2['aveAge']=60 
print (FamilyVsWWTotal) 
  Country      date Region  aveAge 
0     USA  2011-4-3      K      60 
1     CAN  2011-3-5      K      60 
2     USA  2011-4-3      K      60 
3     MEX  2011-5-7      K      60 
 
print (Table1) 
  Country      date Region  aveAge 
0     USA  2011-4-3      K      60 
1     CAN  2011-3-5      K      60 
2     USA  2011-4-3      K      60 
3     MEX  2011-5-7      K      60 
 
print (Table2) 
  Country      date Region  aveAge 
0     USA  2011-4-3      K      60 
1     CAN  2011-3-5      K      60 
2     USA  2011-4-3      K      60 
3     MEX  2011-5-7      K      60