【问题标题】:Element Wise Division in Pandas not working as expectedPandas 中的 Element Wise Division 未按预期工作
【发布时间】:2022-09-30 17:48:02
【问题描述】:

我有一个数据框,有 2 列。

col1
>>> 0    6.382474405435247e+08
1    2.414721440547710e+11
2    1.078680797585678e+13
3    5.234307123383891e+14
4    2.819640463840954e+16
5    1.723860035624660e+18
6    1.221906929903091e+20
7    1.024971897290708e+22
8    1.034685721591756e+24
9    1.266874815617544e+26
Name: col1 , dtype: float64

第二列是

col2
>>> 1    1.652022839203982e+13
2    7.379755212750794e+14
3    3.581032068558979e+16
4    1.929046707578994e+18
5    1.179372536567603e+20
6    8.359631557019926e+21
7    7.012307736342528e+23
8    7.078764509914335e+25
9    8.667277701968806e+27
Name: call2, dtype: float64

现在,当我按元素划分时,正如很多答案中提到的那样,我们只需要像这样划分它们。

df[\'col1\'] / df[\'col2\']

但结果是一个常数

>>> 0    0.014616755793226
1    0.014616755793226
2    0.014616755793226
3    0.014616755793226
4    0.014616755793226
5    0.014616755793226
6    0.014616755793226
7    0.014616755793226
8    0.014616755793226
9    0.014616755793226
dtype: float64

这不应该发生在元素明智的划分中。

如果我通过手动输入值的循环来执行此操作,则它是正确的。

l1 = [6.382474405435247e+08,  2.414721440547710e+11, 1.078680797585678e+13, 5.234307123383891e+14]
l2 = [1.652022839203982e+13, 7.379755212750794e+14, 3.581032068558979e+16, 1.929046707578994e+18]

for i, j in zip(l1, l2):
    print(i, j)
    print(i / j)

或者,如果我从这些值创建一个新的数据框,那么

s = pd.DataFrame({\"l1\":l1, \"l2\":l2})
s[\'l1\'] / s[\'l2\'] # correct
>>>0    0.000038634298836
1    0.000327208880367
2    0.000301220647270
3    0.000271341647811

我什至将两者都转换为 Numpy,但仍然无法正常工作。

print(df[\'col1\'].to_numpy() / df[\'col2\'].to_numpy())
>>>
[0.01461676 0.01461676 0.01461676 0.01461676 0.01461676 0.01461676
 0.01461676 0.01461676 0.01461676 0.01461676]

    标签: python pandas


    【解决方案1】:

    原因是两个系列都有不同的索引,所以如果划分它是相互对齐的 - 来自第一个系列的index=1 与来自另一个系列的index=1 匹配。

    为避免将第二个系列转换为 numpy 数组,只需两个系列的长度相同:

    df1['col1'] / df2['col2'].to_numpy()
    

    【讨论】:

    • 不工作,我什至将两者都转换为 numpy 并得到相同的恒定答案。 ` [0.01461676 0.01461676 0.01461676 0.01461676 0.01461676 0.01461676 0.01461676 0.01461676 0.01461676 0.01461676]`
    • @AhmadAnis - 所以这意味着s = pd.DataFrame({"l1":df['col1'].tolist(), "l2":df['col2'].tolist()}) s['l1'] / s['l2'] # 运作良好?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2019-09-06
    • 2021-06-04
    相关资源
    最近更新 更多