计算十进制后的浮点数的确切字符

时间:2019-04-03 15:59:00

标签: python pandas count decimal

我有一个cvs文件,其中的数据我只想更新一次,如果错误地使更新再次运行,则需要确保数据不会再次更新。在更新运行之前,数据没有小数位,但是在更新之后,每个值都除以100,因此每行将有2个小数位。我的想法是计算小数点后的字符数。

This is what I want to achieve:

If >= 2 then do not update
Else if <=2 then update

运行更新后,我尝试对字符进行计数,但是某些值将带有2个零-120.00。当我计数时,我只得到1而没有得到2。我需要得到2。基本上,每个更新的值将具有2个小数位,即使两个都是零也是如此。

df = pd.read_csv(input.csv, names=['Open','High','Low','Close'])

df = df['Close'].astype(str).str.extract('\.(.*)').str.len()

print(df)

2 个答案:

答案 0 :(得分:0)

我对pd模块不熟悉。但是,您可以执行以下操作,其中s是列的字符串值:

num_decimals = len(s.partition('.')[-1])

答案 1 :(得分:0)

计算小数的方式是正确的。如果120.00 == 120.0也不是您的错,但我看不出一种区分它们的方法。所以我想你已经对你的问题有了答案。

但是,如果您的问题是如何检查文件是否已更新,则根据您的实际情况提供以下建议。

如果您完全控制执行更新的功能

您可以在其末尾添加一行,以写出已完成更新的位置:

from pathlib import Path
def update(...):
    path = Path('csv_has_been_updated.txt')
    if path.isfile():
        return  # No update is needed if the file exists
    ...
    # Perform update
    ...
    path.touch()  # Create file on disk to indicate update has been done

如果不这样做

您可以通过比较文件的创建日期和修改日期来检查文件是否曾经被修改过(假设更新是唯一可以写入文件的东西)(请参见对this question的回答)。 / p>