Pandas 的限制及其在 Python 中的替代方案

计算科学 Python 数据分析 数据管理
2021-12-09 04:23:41

我在某处读到Pandas最初是为金融界开发的,至少不是专门为自然科学(物理学、生物学等)开发的,那么有没有类似的数据分析 Python 包更“面向自然科学”?

我刚开始使用 Pandas,已经遇到了两个不使用其他包或自制解决方案无法解决的问题:

  • 如何管理不确定性?
  • 如何轻松定义我的数据单位?

也许还有其他问题,但我缺乏更准确的经验。目前,我考虑使用不确定性包来解决第一点,但我不确定它是否能与 Pandas 一起正常工作并且不会降低计算速度。实际上,我不是在寻找一种计算不确定性的方法,只是一种将不确定性与我导入的数据一起存储的简单方法。对于第二点,我没有找到比在我的 DataFrame 之外创建一个字典来管理与每个数据关联的单元更好的解决方案。

如果您曾经遇到过同样的问题,您是如何解决它的,或者您在自然科学中的 Python 中使用哪些其他包进行数据操作/存储/分析?

2个回答

我同意 Davidmh 的观点,即计算不确定性不应该由自动库处理。您将很快遇到自动失败的情况(例如尝试进行傅里叶变换)。

但是,您说您只想保留数据的不确定性。为什么不将它们添加为数据框中的额外列?这就是我通常使用 pandas 管理不确定性的方式。

Pandas 不支持单位,但是任何东西都可以进入数据框,因此您可以直接使用数量包。然而,并非所有功能都可以在 pandas 中使用(尽管数量惊人),并且会有性能损失。

已经有一些讨论允许在 pandas 中附加元数据,但到目前为止似乎没有任何结果。

除了 C++11 可能的例外,我知道没有任何语言或库可以为您提供非常好的、一流的单元支持。总是有性能损失和缺乏兼容性

.

管理不确定性实际上是一个非常微妙的统计问题。当误差呈正态分布、独立且较小时,使用平方偏导数进行误差传播的已知表达式是好的。通常是这种情况;事实上,即使没有完全满足正态性或独立性,对于大多数实际情况,结果也可以合理地接近真实结果,前提是您只对区间的合理估计感兴趣。

另一种可能性是使用上限和下限重复操作,这样sin(2±0.1)=sin(2)sin(1.9)sin(2.1),但这仅在间隔是硬阈值时才正确(例如精度为 0.1 的无噪声仪器的输出)。

对于需要更高准确性的情况,如果您有一个很好的不确定性分析模型,则可以使用诸如最大似然之类的方法来得出正确的估计量。

但是,如果您想要对任何可能的输入都有效的正确结果(想象必须对噪声检测器进行分析建模,其中噪声与精度具有相同的数量级),考虑到所有相关性,并能够探索所有相关的参数空间,你需要蒙特卡罗方法。将随机噪声添加到您的输入的几个实例中并运行完整分析。当然,这可能意味着您必须将计算时间乘以数百或数千,但它始终是可并行的。

所以,最后,这一切都取决于你想做什么,准确到什么程度,以及你有多少资源。