You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将含复数的DataFrame拆分为实部和虚部列

拆分DataFrame中的复数为实部和虚部列

方法一:使用正则表达式提取

利用str.extract配合正则表达式,可一次性匹配实部和虚部数值,兼容+/-分隔场景,同时支持虚部开头无0的格式(如.316...i):

import pandas as pd

df = pd.DataFrame({"AB": ['0.316227766016838-0.316227766016838i',
                    '0.316227766016838-0.316227766016838i',
                    '0.316227766016838-0.316227766016838i',
                    '0.316227766016838-0.316227766016838i',
                    '0.316227766016838+0.316227766016838i',
                    '0.3162277660168380+.316227766016838i']})

# 正则匹配并拆分实部、虚部
df[['实部', '虚部']] = df['AB'].str.extract(r'([+-]?\d*\.?\d+)([+-]\d*\.?\d+)i', expand=True)

# 转换为数值类型
df['实部'] = pd.to_numeric(df['实部'])
df['虚部'] = pd.to_numeric(df['虚部'])

print(df)

方法二:转换为复数类型后提取

更稳妥的方式是先将字符串转为Python复数对象,再直接提取实部和虚部,可处理所有合法复数格式:

import pandas as pd

df = pd.DataFrame({"AB": ['0.316227766016838-0.316227766016838i',
                    '0.316227766016838-0.316227766016838i',
                    '0.316227766016838-0.316227766016838i',
                    '0.316227766016838-0.316227766016838i',
                    '0.316227766016838+0.316227766016838i',
                    '0.3162277660168380+.316227766016838i']})

# 转换为复数对象
df['复数'] = df['AB'].apply(complex)

# 提取实部和虚部
df['实部'] = df['复数'].apply(lambda x: x.real)
df['虚部'] = df['复数'].apply(lambda x: x.imag)

# 可选:删除中间复数列
df = df.drop('复数', axis=1)

print(df)

两种方法均可得到数值类型的实部、虚部列,方法二更适配复杂复数格式,避免正则匹配的遗漏情况。

内容的提问来源于stack exchange,提问作者Rupak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:43:04