gpt4 book ai didi

python - 使用 pandas.eval 求和会为未包含在两个数据帧中的列带来 NaN 消息

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:51 24 4
gpt4 key购买 nike

我正在尝试从各种碎片化的小数据帧中创建一个累积数据帧。

例如,我有碎片化的小数据帧 A 和 B,例如:

      a  c
100 1 2
200 5 6

a b d
100 2 3 8
200 9 1 9

A = pd.DataFrame(data = [[1,2],[5,6]], index=[100,200], columns=['a','c'])

B = pd.DataFrame(data = [[2,3,8],[9,1,9]], index=[100,200], columns=['a','b','d'])

我想将它们添加到累积数据框 c

      a  b  c  d
100 0 0 0 0
200 0 0 0 0

C = pd.DataFrame(data = [[0,0,0,0],[0,0,0,0]], index=[100,200], columns=['a','b','c','d'])

所以我想做的就是,将 A 和 B 添加到 C 中,得到:

      a   b  c  d
100 3 3 2 8
200 14 1 6 9

我首先做的是这样的:

C[A.columns] += A
C[B.columns] += B

效果很好,并带来了所需的输出。

然而,在我的实际应用中,由于 A、B、C 的大小相当大,而且有很多很多像 A 和 B 这样的碎片数据帧,效率问题就出现了

因此,我寻找了一些替代方法,发现 pandas.eval 在大型矩阵运算中非常强大。

我尝试的是:

import pandas as pd
C = pd.eval('C+A')
C = pd.eval('C+B')

但是,在这种情况下,未包含在 A 或 B 中的列将变为 NaN...

out: 
a b c d
100 1.0 NaN 2.0 NaN
200 5.0 NaN 6.0 NaN

out:
a b c d
100 3.0 NaN NaN NaN
200 14.0 NaN NaN NaN

有什么建议可以使所需的操作更有效吗?任何建议将不胜感激(我不一定必须使用 pd.eval)

提前谢谢您!

最佳答案

有时使用 pd.eval 很棘手。

这里您需要使用在 C df 中添加的列,并且在使用 pd.eval 时我们需要使用变量传递列列表。

a_cols = A.columns
b_cols = B.columns
C[a_cols] = pd.eval('C[a_cols]+A', engine='python')
C[b_cols] = pd.eval('C[b_cols]+B', engine='python')

out:
a b c d
100 3 3 2 8
200 14 1 6 9

对于引擎,我们需要使用 'python' 而不是引擎默认的 'numexpr'

关于python - 使用 pandas.eval 求和会为未包含在两个数据帧中的列带来 NaN 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53737979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com