使用pandas读取含复数的CSV后,无法用numpy提取实部的问题
解决Pandas读取复数字符串无法转为实数的问题
首先,咱们来拆解下你遇到的问题:你读取的文件里的复数是以字符串形式存储的,Pandas默认把它们识别成了object类型(也就是普通文本),而np.real()只能处理数值类型的复数,自然就触发TypeError了。下面给你两种简单的解决办法:
方法一:读取后转换列类型
先按你原来的方式读取数据,然后把effective_index列转换成复数类型,之后就能正常提取实部了:
import pandas as pd import numpy as np # 读取数据 df = pd.read_csv('PN_lateral_n_eff.txt', header=None) df.columns = ["effective_index"] # 将字符串列转为复数类型 df['effective_index'] = df['effective_index'].apply(complex) # 提取实部 df['real_part'] = np.real(df['effective_index'])
方法二:读取时直接指定转换器
更高效的方式是在读取文件的时候就告诉Pandas怎么解析这列数据,用converters参数直接把第一列转成复数:
import pandas as pd import numpy as np # 读取时直接转换为复数类型 df = pd.read_csv('PN_lateral_n_eff.txt', header=None, converters={0: complex}) df.columns = ["effective_index"] # 直接提取实部 df['real_part'] = np.real(df['effective_index'])
两种方法都能解决问题,方法二更一步到位,避免后续的类型转换操作。转换完成后,你可以用df.dtypes确认effective_index列已经变成complex128类型了,这时候np.real()就能正常工作啦。
内容的提问来源于stack exchange,提问作者Khalilrazu
相关产品推荐
相关产品推荐

