如何提取Pandas DataFrame中所有复数元素的实部?
复数DataFrame实部提取方案
操作失效的核心原因是当前DataFrame的元素为object类型的复数对象,而非pandas原生支持的complex数值类型,相关函数无法自动识别逐元素处理,可选用以下两种方法解决:
方法1:逐元素处理(小数据量适用)
使用applymap对每个单元格单独执行实部提取操作:
df_real = df_test.applymap(np.real)
方法2:转换类型后批量提取(大数据量性能更优)
先将整个DataFrame转换为复数数值类型,再直接批量提取实部:
# 转换为complex128复数类型 df_complex = df_test.astype('complex128') # 提取实部并保留原索引、列名 df_real = pd.DataFrame(df_complex.values.real, index=df_complex.index, columns=df_complex.columns)
之前操作失效原因说明
- 直接调用
np.real(df_test)时,numpy将object类型的DataFrame识别为普通对象数组,不会逐元素解析复数结构,因此返回结果仍保留完整复数形式 - 调用
df_test.apply(lambda x: np.real(x))时,apply传入的参数x是整列Series对象,numpy对object类型的Series执行real操作不会触发逐元素计算,因此结果无变化 - 调用
df_test.apply(lambda x: x.real)时,x是Series对象,本身没有real属性,只有复数类型的标量或复数dtype的Series才有该属性,因此执行报错
内容的提问来源于stack exchange,提问作者gravedigger
相关产品推荐
相关产品推荐

