首页 > 解决方案 > pandas 数据框的集成会产生一个长度不同的数组。如何将其存储在同一个数据框中?

问题描述

我有一个熊猫数据框,例如

    x  y
0   0  3
1   1  3
2   2  2
3   4  3
4   5  4
5   7  3
6   8  1
7  10  2

现在我想使用 .为每个数据点计算这些值的积分scipy.integrate.cumtrapz。如果我跑

>>> cumtrapz(df.x,df.y)
array([  0. ,  -1.5,   1.5,   6. ,   0. , -15. ,  -6. ])

我得到了我想要的值,但我无法将它插入到数据框中:

>>> df["z"] = cumtrapz(df.x,df.y)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/steen/.local/lib/python3.8/site-packages/pandas/core/frame.py", line 3044, in __setitem__
    self._set_item(key, value)
  File "/home/steen/.local/lib/python3.8/site-packages/pandas/core/frame.py", line 3120, in _set_item
    value = self._sanitize_column(key, value)
  File "/home/steen/.local/lib/python3.8/site-packages/pandas/core/frame.py", line 3768, in _sanitize_column
    value = sanitize_index(value, self.index)
  File "/home/steen/.local/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 747, in sanitize_index
    raise ValueError(
ValueError: Length of values (7) does not match length of index (8)

因为,如上所示,输出数组的长度比原始数据帧小一。

我该如何做到这一点?

标签: pythonpandasscipy

解决方案


Scipy 文档在这里解决了这个问题:

scipy.integrate.cumtrapz

引用:


初始:标量,可选

如果给定,则将此值用作返回结果中的第一个值。通常,该值应为 0。默认值为 None,这意味着没有返回 x[0] 处的值,并且 res 沿积分轴有一个小于 y 的元素。


例子:

cumtrapz(df.x,df.y, initial=0)

输出:

array([  0. ,   0. ,  -1.5,   1.5,   6. ,   0. , -15. ,  -6. ])

推荐阅读