将DataFrame字符串complex i转换为j python

时间:2015-06-12 16:47:15

标签: python pandas

我希望使用这种类型的DataFrame。但是因为我导入的数据是使用i字母作为复数的虚部,所以python不允许我将它转换为浮点数。

5.0 0.01511+0.0035769i
5.0298  0.015291+0.0075383i
5.0594  0.015655+0.0094534i
5.0874  0.012456+0.011908i
5.1156  0.015332+0.011174i
5.1458  0.015758+0.0095832i

如何在DataFrame的每一行中将i更改为j?

谢谢。

2 个答案:

答案 0 :(得分:0)

如果你有这样的字符串:complexStr = "0.015291+0.0075383i",你可以这样做:

complexFloat = complex(complexStr[:-1] + 'j')

如果您的数据是这样的字符串:str = "5.0 0.01511+0.0035769i",则必须将第一部分分开,如下所示:

number, complexStr = str.split()
complexFloat = complex(complexStr[:-1] + 'j')

>>> complexFloat
>>> (0.015291+0.0075383j)
>>> type(complexFloat)
>>> <type 'complex'>

答案 1 :(得分:0)

我不确定您是如何获取数据帧的,但是如果您从具有合适标题的文本文件中读取它,那么您可以使用转换器功能来排序&#39; j& #39; - &GT; &#39;我&#39;这样你的dtype就可以正确创建: 对于文件test.df

a    b
5.0 0.01511+0.0035769i
5.0298  0.015291+0.0075383i
5.0594  0.015655+0.0094534i
5.0874  0.012456+0.011908i
5.1156  0.015332+0.011174i
5.1458  0.015758+0.0095832i

代码

import pandas as pd
df = pd.read_table('test.df',delimiter='\s+',
            converters={'b': lambda v: complex(str(v.replace('i','j')))}
                  )

df作为:

        a                      b
0  5.0000   (0.01511+0.0035769j)
1  5.0298  (0.015291+0.0075383j)
2  5.0594  (0.015655+0.0094534j)
3  5.0874   (0.012456+0.011908j)
4  5.1156   (0.015332+0.011174j)
5  5.1458  (0.015758+0.0095832j)

列dtypes:

a       float64
b    complex128