2014-10-17 38 views
0

aI有一个数据框,其中包含两列小数,我想从另一列中减去一列。然而,当我尝试做这样的事情:扣除熊猫中的两列小数

df['diff'] = df['a'] - ['b'] 

我得到

TypeError: unsupported operand type(s) for -: 'str' and 'str' 

我导入CSV像这样:数据

pd.read_csv(file, sep='\t', 
        parse_dates = ['datetime'], 
        dtype={'a': decimal.Decimal, 'b': decimal.Decimal}) 

样品:

datetime a b 
2014-10-15T00:00:01.752Z 8614.0 8616.0 
2014-10-15T00:00:02.049Z 8613.0 8616.0 
2014-10-15T00:00:02.049Z 8613.0 8616.0 
2014-10-15T00:00:02.159Z 8613.0 8616.0 
2014-10-15T00:00:02.159Z 8613.0 8616.0 
2014-10-15T00:00:02.299Z 8614.0 8616.0 
2014-10-15T00:00:02.299Z 8614.0 8616.0 
2014-10-15T00:00:02.440Z 8614.0 8616.0 
2014-10-15T00:00:02.440Z 8614.0 8616.0 
+0

为什么不把它们设置为浮动,然后做差异?你需要他们是十进制的吗?你可以发布你的原始数据,csv解析器应该能够嗅探dtype,如果它被如此存储:'19.2222',但是如果该列上的任何值不同,那么它可能具有混合dtypes,或者如果它被存储为像' '19 .2222''那么你需要将它们转换为 – EdChum 2014-10-17 08:09:34

+0

我担心precisionwhen使用双打时 – Arg 2014-10-17 08:14:55

+0

你的意思是64位浮点数的精度不够好? – EdChum 2014-10-17 08:15:40

回答

0

只需使用np.float64而不是decimal.Decimal