将float Series中的所有元素转换为整数

Dat*_*ast 3 python casting series pandas

我在数据框中有一个具有浮点值的列(所以我将此列称为Float系列).我想将所有值转换为整数或只是将其四舍五入,以便没有小数.

我们说数据帧是df,列是a,我试过这个:

df['a'] = round(df['a']) 
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说这个方法不能应用于系列,只适用于单个值.

接下来我尝试了这个:

for obj in df['a']: 
   obj =int(round(obj))
Run Code Online (Sandbox Code Playgroud)

在此之后我打印了df,但没有变化.我哪里错了?

EdC*_*ica 6

round因为它是在类似于数组而不是标量值的pandas系列上调用它不会工作,有内置的方法pd.Series.round来操作整个Series数组,之后你可以使用astype以下方法更改dtype :

In [43]:
df = pd.DataFrame({'a':np.random.randn(5)})
df['a'] = df['a'] * 100
df

Out[43]:
            a
0   -4.489462
1 -133.556951
2 -136.397189
3 -106.993288
4  -89.820355

In [45]:
df['a'] = df['a'].round(0).astype(int)
df

Out[45]:
     a
0   -4
1 -134
2 -136
3 -107
4  -90
Run Code Online (Sandbox Code Playgroud)

当有可用的矢量化方法时,也不必迭代行

这个:

for obj in df['a']: 
   obj =int(round(obj))
Run Code Online (Sandbox Code Playgroud)

不会改变系列中的单个单元格,它会在值的副本上运行,这就是df未发生变异的原因.