将数据框中的值取整并丢失小数点

时间:2018-07-04 00:51:21

标签: python pandas dataframe

我正在尝试将pandas数据框的值四舍五入到最接近的整数,以便可以以这种方式保存该数据框,然后再将其潜在地读取/保存为csv。我不确定为什么我不能匹配.round()方法在pandas网站上描述的结果。这是我的代码:

import pandas as pd
import numpy as np

x1 = np.random.randn(10)
df1 = pd.DataFrame({'x':x1})

df1

    x
0   0.540351
1   0.205924
2   0.619970
3   0.636680
4   -1.415081
5   0.162028
6   -0.080224
7   -0.022692
8   -0.367687
9   -0.365140

df1.round(0)

    x
0   1.0
1   0.0
2   1.0
3   1.0
4   -1.0
5   0.0
6   0.0
7   0.0
8   0.0
9   0.0

我想获得“ 1”和“ 0”-这是我根据在线文档-https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.round.html所期望的。显示.round(decimals)的第三个示例将B列的值设置为“ 1”和“ 0”,而1.0和0.0则相反。

2 个答案:

答案 0 :(得分:1)

参数为0的

pd.Series.round通过舍入到小数点后0位来完成其工作。不允许转换为整数dtype。为确保发生这种情况,您应该在单独的步骤中应用转化:

import pandas as pd
import numpy as np

np.random.seed(0)

x1 = np.random.randn(10)
df1 = pd.DataFrame({'x':x1})

print(df1['x'].round(0).astype(int))

0    2
1    0
2    1
3    2
4    2
5   -1
6    1
7    0
8    0
9    0
Name: x, dtype: int32

答案 1 :(得分:0)

您可以使用format

df.x.map("{:.0f}".format).astype(int)
Out[471]: 
0    1
1    0
2    1
3    1
4   -1
5    0
6    0
7    0
8    0
9    0
Name: x, dtype: int32