【问题标题】:Python - Adding Decimal places to elements in cvs filePython - 将小数位添加到 csv 文件中的元素
【发布时间】:2016-06-10 18:19:20
【问题描述】:

从数据模拟中导出 CSV 文件时,我们丢失了与记录的数据相关的小数位,导致我们的绘图和值不准确。

收集数据后,将其导入 excel,然后导出为 CSV。数据中最初存在十进制值(例如 1356.00000),但它们并未在 CSV 数据中如此导出。我对这些值使用了curve_fit,并且我发现精度随着十进制值的丢失而大大降低。这就是为什么我要为数据集中的每个元素添加小数点。

有没有办法解决这个问题,使数组中的所有 values 元素都输出为带有十进制值的数组?

import numpy as np
import scipy as sp
import csv

DecayTime = []
DecayCount = []

with open('Half_Life_Run_Decay.csv', 'r') as h:
    reader = csv.reader(h, delimiter=',')
    for row in reader:
        DecayTime4.append(row[0])
        DecayCount4.append(row[1])

DecayTime = np.array(DecayTime) 
DecayCount = np.array(DecayCount) 

【问题讨论】:

  • csv.reader 将它们读取为字符串。在附加到 DecayTime[] 之前尝试将它们转换为 float
  • csv 文件不准确吗?无法获取包含不准确/不精确数据的 csv 文件并修复准确性/精度。另一方面,如果您的意思是在加载 csv 文件时丢失精度,您的问题需要澄清。
  • @TadhgMcDonald-Jensen 收集数据后,将其导入 excel,然后将数据作为 cvs 导出到其中。数据中最初有十进制值(即 1356.00000),但它们没有与数据一起导出。我对这些值使用了curve_fit,并且我发现精度随着十进制值的丢失而大大降低。这就是为什么我要为数据集中的每个元素添加小数点。
  • 如果数据在excel -> csv 阶段丢失了精度,您向我们展示了错误的代码,并且“未与数据一起导出”是指实际数字确实导出但为1256.0完全精确?
  • numpy.savetxt 将是一个不错的选择,尤其是如果您的工作流程中已经有 scipy。您将对输出格式进行填充控制。

标签: python csv numpy


【解决方案1】:

我不确定您的问题与精度有关,而与数据类型有关。您的所有数据都被解释为整数吗?

在访问其列之前尝试将您的行转换为浮点数:

row = map(float, row)           

或者如果你只是想改变字符串:

row = map(lambda s: s + ".0000", row)                                       

【讨论】:

  • 问题在于精度。我已经运行了它们的小数位被保留的地方,例如 256.00000 和 345.00000,当通过curve_fit 运行它时,它们给了我正确的值和绘图。我只是想知道如何通过添加小数位来循环这个。您可以让数组中的每个元素都为 0.0001。
  • 有趣的是numpy 数组的默认数据类型是float。根据这个论点,您的 curve_fit 应该运行良好。
  • @Quirk 是的,我仍然不确定这是否是数据类型问题。我对 numpy 不太熟悉,但 curve_fit 确实将函数作为参数,可能将整数视为整数。我想让 OP 尝试添加“.0000”,看看它是否真的解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2021-05-28
  • 2014-04-13
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多