【问题标题】:Python Pandas; "excel" column operations蟒蛇熊猫; “excel”列操作
【发布时间】:2016-10-16 05:43:37
【问题描述】:

我对python很陌生。搜索以前的问题我找不到这个问题的答案。

对于一个项目,我必须分析大量 .txt 文件并始终对其执行相同的计算。使用 pandas 创建数据框,效果很好。

我想要一个对其他列执行计算的额外列,例如 c = a + b。 对于简单的计算,这很好用:

In [41]: import pandas as pd
In [42]: import numpy as np

In [43]: df = pd.DataFrame(np.random.randn(10,2),columns=list('ab'))

In [44]: df
Out[45]: 
      a         b
0  0.163138 -1.261099
1  0.094772 -0.553349
2 -1.677519 -0.966680
3  1.732083 -1.118715
4  0.172240 -0.404648
5  0.270712  0.089841
6  0.589787  1.569790
7  0.822016  0.857993
8 -0.269941  0.586059
9 -0.152639  0.240438

In [46]: df["c"] = df["a"] + df["b"]

In [47]: df
Out[48]: 
      a         b         c
0  0.163138 -1.261099 -1.097961
1  0.094772 -0.553349 -0.458577
2 -1.677519 -0.966680 -2.644198
3  1.732083 -1.118715  0.613368
4  0.172240 -0.404648 -0.232407
5  0.270712  0.089841  0.360554
6  0.589787  1.569790  2.159576
7  0.822016  0.857993  1.680010
8 -0.269941  0.586059  0.316118
9 -0.152639  0.240438  0.087800

使用更“复杂”的计算时遇到的问题:

# C1 and C2 are some constants needed for the calculations

In [49]: C1 = 1.5

In [50]: C2 = 2.5

In [51]: df["c"] = df["a"] + [(C1 * df["a"]) + (C2 * df["b"] ** 2)]

Exception: Data must be 1-dimensional 

这个问题有解决方法吗?还是我处理的完全错误?

【问题讨论】:

    标签: excel python-3.x pandas calculated-columns


    【解决方案1】:

    首先错误是您将内部计算结果包装在方括号中,删除它可以修复错误:

    In [157]:
    
    df["c"] = df["a"] + (C1 * df["a"]) + (C2 * df["b"] ** 2)
    df
    Out[157]:
              a         b         c
    0  0.163138 -1.261099  4.383772
    1  0.094772 -0.553349  1.002418
    2 -1.677519 -0.966680 -1.857622
    3  1.732083 -1.118715  7.459016
    4  0.172240 -0.404648  0.839950
    5  0.270712  0.089841  0.696959
    6  0.589787  1.569790  7.635069
    7  0.822016  0.857993  3.895420
    8 -0.269941  0.586059  0.183810
    9 -0.152639  0.240438 -0.237071
    

    问题在于内部计算会生成一个包含系列的列表:

    In [159]:
    [(C1 * df["a"]) + (C2 * df["b"] ** 2)]
    ​
    Out[159]:
    [0    4.220634
     1    0.907646
     2   -0.180103
     3    5.726933
     4    0.667710
     5    0.426247
     6    7.045282
     7    3.073404
     8    0.453751
     9   -0.084432
     dtype: float64]
    

    然后您尝试添加其他列/系列,但它不知道如何对齐

    【讨论】:

    • 谢谢,去掉括号效果很好!事实上,我只是想将 df["b"] ** 2 的结果乘以常数 C2,所以这部分已经没问题了。
    • OK 不确定,将删除最后一部分
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2018-10-10
    • 2016-07-11
    • 2018-11-07
    • 2013-10-19
    相关资源
    最近更新 更多