如何用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
相关产品推荐
相关产品推荐

