如何截断python pandas数据框架中的两列小数点?



我需要帮助截断数据框架内的小数列,这与其他计算相关联,以输出1或0二进制列,称为"scenario "。该数据框有20多个列。

在这种情况下,我有两列(A列和B列)的小数沿着一个基于时间的索引。列可以有不同数量的小数点,并且在前面的行中有NaN值。

我试图截断值只有这两个列用于计算和"扔掉",不改变原来的列或生成新的列。

。ColA可为4位小数,ColB可为6位小数

<表类> 可乐 ColB tbody><<tr>南南南南0.99540.9956420.98540.997450

您可以使用numpytrunc:

df = pd.DataFrame({'ColA ': [0.9954, 0.9854], 'ColB': [0.995642, 0.99745]})
np.trunc(10 * df) / 10

结果:

ColA   ColB
0    0.9   0.9
1    0.9   0.9

我认为最简单的方法是使用applymap与数学模块的truncate函数配对。下面是一个例子:

trunc = lambda x: math.trunc(10 * x)/10
df.applymap(trunc)

您需要将此应用于您感兴趣的列,但我在一些任意示例上测试了它,并且它运行良好。希望这对你有帮助!如有必要,可详加说明。

你也可以使用正则表达式:

df = pd.DataFrame({'ColA ': [0.99989, 0.986767], 'ColB': [0.9890, 0.9588]})
func = lambda x: re.match(r'd+.d{1}', str(x)).group(0)
df.applymap(func)

或者这里有一个不那么优雅的方法,你首先将数字转换成字符串,然后你分别得到字符串的不同部分,最后将字符串转换回浮点数(是的,这是不有效的):

def func(x): 
# Convert number to a string 
digits = str(x).split(".")
# Manually put the number back together: 
digit = digits[0] + "." + digits[1][:1]
return float(digit)

df.applymap(func)

结果:

ColA  | ColB
0.9   |  0.9
0.9   |  0.9