Why can't iterrows do math - and instead returns integer values where these should be floats

 ̄綄美尐妖づ 提交于 2020-01-05 06:23:08

问题


I want to loop through a data frame and then fill a column of the frame with interest rates from a complex calculation. Apparently, the best way to loop through a frame is to use iterrows - But when I use iterrows, I get integer values only:

import pandas
df = pandas.DataFrame({"A": [1,2,3,4,5]})
df['B']=0
for index, row in df.iterrows():
    row['B']=row['A']*10.05
df

returns

   A   B
0  1  10
1  2  20
2  3  30
3  4  40
4  5  50

Which is incorrect, given that all values in A were multiplied by 10.05.

The example below, gives the correct results:

df['B']=df['A']*10.05

   A      B
0  1  10.05
1  2  20.10
2  3  30.15
3  4  40.20
4  5  50.25

As said, it is not easy to use this method, because the calculations are complex.

Can I use iterrows to produce the correct result?


回答1:


It seems you need assign scalar values with loc (at, ix):

for index, row in df.iterrows():
    df.loc[index, 'B'] =row['A']*10.05
print (df)
   A      B
0  1  10.05
1  2  20.10
2  3  30.15
3  4  40.20
4  5  50.25

But better is use apply with custom function:

df = pandas.DataFrame({"A": [1,2,3,4,5]})


def f(x):
    x['B'] = x.A * 10.05
    #another code
    return x

df = df.apply(f, axis=1)
print (df)
     A      B
0  1.0  10.05
1  2.0  20.10
2  3.0  30.15
3  4.0  40.20
4  5.0  50.25


来源:https://stackoverflow.com/questions/42593859/why-cant-iterrows-do-math-and-instead-returns-integer-values-where-these-shou

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!