如何在Pandas数据框中获取一列的实部和虚部?

6
import pandas as pd

我有一个数据框:

df=pd.DataFrame({'cmplxnumbers':[1+1j,2-2j,3*(1+1j)]})

我需要获取该列中数字的虚部。

我通过以下方式实现:

df.cmplxnumbers.apply(lambda number: number.imag)

我得到的结果是:

0    1.0
1   -2.0
2    3.0
Name: cmplxnumbers, dtype: float64

这符合预期。

有没有更快、更直接的方法,也许不涉及 lambda 函数?


1
您是否有速度问题需要报告?这很简单,作为解决方案而言。您需要对列的每个元素应用.imag限定符(本质上是一个get函数调用)。lambda构造函数仅应用一次;生成的函数会一直存在,直到整个列被处理完毕。 - Prune
我并没有特别的速度问题,我没有找到比我提出的答案更好的答案,而且没有一个更简单的方法似乎有些奇怪。 - zabop
2个回答

6

Pandas的DataFrame/Series是在numpy数组的基础上构建的,因此它们可以传递给大多数numpy函数。

在这种情况下,您可以尝试以下操作,这应该比非向量化的.apply更快:

df['imag'] = np.imag(df.cmplxnumbers)
df['real'] = np.real(df.cmplxnumbers)

输出:

         cmplxnumbers  imag  real
0  1.000000+1.000000j   1.0   1.0
1  2.000000-2.000000j  -2.0   2.0
2  3.000000+3.000000j   3.0   3.0

或者您可以使用 agg

df[['real','imag']] = df.cmplxnumbers.agg([np.real, np.imag])

使用 pandas v1.4.1 对我似乎不起作用:AttributeError: 'DataFrame' 对象没有 'cmplxnumbers' 属性。 - nicrie
1
@nicrie 'cmplxnumbers' 这里是列名,你可以用你的数据中实际的列名替换 df.cmplxnumbers,例如 df['col1'] - Quang Hoang

1
使用 Pandas 对象的 .to_numpy() 方法获取 NumPy 数组,然后可以访问其 realimag 字段。简而言之:
real_part = pd_obj.to_numpy().real
imag_part = pd_obj.to_numpy().imag

点击这里查看关于.values.array.to_numpy()的讨论。


不错。文档中提到:“我们建议使用Series.array或Series.to_numpy(),具体取决于您需要底层数据的引用还是NumPy数组”,因此我认为to_numpy()可能更好。 - zabop
1
谢谢,我已经更新了答案。此外,请注意 DataFrame 没有 .array 字段。 - Dev-iL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接