2015-07-21 46 views
1

我有一个状态字典(示例IA:爱达荷州)。我已将字典加载到DataFrame bystate_df中。迭代通过DataFrame时的设置值

然后我导入与我想将它们添加到bystate_df美国死亡人数CSV,因为我读线:

byState_df = pd.DataFrame(states.items()) 
byState_df['Deaths'] = 0 
df['Deaths'] = df['Deaths'].convert_objects(convert_numeric=True) 
print byState_df 
for index, row in df.iterrows(): 
    if row['Area'] in states: 
      byState_df[(byState_df[0] == row['Area'])]['Deaths'] = row['Deaths']   

print byState_df 

byState_df仍然是0后记:

 0       1 Deaths 
0 WA    Washington  0 
1 WI     Wisconsin  0 
2 WV    West Virginia  0 
3 FL     Florida  0 
4 WY     Wyoming  0 
5 NH    New Hampshire  0 
6 NJ    New Jersey  0 
7 NM    New Mexico  0 
8 NA     National  0 

我在测试row['Deaths']时,它迭代,它产生正确的值,它似乎是错误地设置byState_df值。

+0

我想这是因为你用的'byState_df链片[(byState_df [0] ==行[“区”])] [“死亡”]',这样你实际上是在副本上设置一些价值观而不是实际的'df'。 –

+0

第一个索引'[... == ...]'是高级索引,并产生一个副本。使用'['Deaths']进行索引可能会起作用,因为它会返回其中一个字段的视图。 – hpaulj

回答

1

你可以尝试下面的代码,我使用.loc而不是[][]

byState_df = pd.DataFrame(states.items()) 
byState_df['Deaths'] = 0 
df['Deaths'] = df['Deaths'].convert_objects(convert_numeric=True) 
print byState_df 
for index, row in df.iterrows(): 
    if row['Area'] in states: 
      byState_df.loc[byState_df[0] == row['Area'], 'Deaths'] = row['Deaths']   

print byState_df 
+0

工作!谢谢 – user1760634