使用Python从CSV文件中读取复数

4
我在读取CSV文件中的复数时遇到了问题。 文件格式如下:
( -353.10438 +j1.72317617 ),( -23.16000 +j0.72512251 )

我尝试使用numpy.genfromtxt导入数据:

data=genfromtxt(fname, dtype=complex, skip_header=10, skip_footer=212, delimiter=',')

但每次我输入一个复杂的数,它都会返回nan+0.j。我也试过在数字前后删除括号,并用1j*替换j,但都没有成功。
有什么建议吗?谢谢。

1
@AshishNitinPatil:genfromtxt在numpy中。 - Bill Bell
你的意思是你尝试使用genfromtxt导入数据? - Bill Bell
@BillBell 是的,你说得对。已修复。 - gian9
2个回答

5
我将每个'j'移动到复数的虚部后面,并挤出所有空格,得到了一个类似于以下样本文件的文件。
(-353.10438+1.72317617j),(-23.16000+0.72512251j)
(-353.10438+1.72317617j),(-23.16000+0.72512251j)
(-353.10438+1.72317617j),(-23.16000+0.72512251j)
(-353.10438+1.72317617j),(-23.16000+0.72512251j)

然后我运行了类似于您的代码,并得到了以下类似的结果。
>>> np.genfromtxt('fname.txt', dtype=complex, delimiter=',')
array([[-353.10438+1.72317617j,  -23.16000+0.72512251j],
       [-353.10438+1.72317617j,  -23.16000+0.72512251j],
       [-353.10438+1.72317617j,  -23.16000+0.72512251j],
       [-353.10438+1.72317617j,  -23.16000+0.72512251j]])

我不确定您需要做什么才能获得类似的结果,如果这种方法确实适用于您。

祝你好运!


我按照你说的方法操作并在加号前消除了空格。谢谢! - gian9

3
您可以使用

标签。

np.complex(str(a).replace('j', '') + 'j'

需要先将数值类型转换为字符串,然后移动 'j' 并再次转换为复数类型。


1
我直接使用了数据中的replace函数。data=fname.read() 然后 data=data.replace() 但我猜这和你说的完全一样。 - gian9
是的,你可以在实际解析为复数之前随时使用替换,因为它必须始终以“a+bj”的形式出现才能正确转换。 - rammelmueller

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