【问题标题】:TypeError: must be real number, not str on complex numbersTypeError:必须是实数,而不是复数上的 str
【发布时间】:2021-08-16 06:23:32
【问题描述】:

我正在尝试将我的字符串类型数据转换为复杂类型数据。 我的数据是一个excel文件,你可以检查here(以compressed1.xls的名义)

我从使用数学家的 i 的 Matlab 代码中获取了我的数据,并且我知道 Python 使用 j 的工程约定作为虚数单位,我已经改变了将所有 i 放入 j。我使用 Pandas 读取数据并已将其转换为 Numpy 数组。

到目前为止,这是我的代码:

compressed = pd.read_excel ('compressed1.xls')
comp_ar = np.array(compressed)
comp_array = comp_ar.astype(np.complex)

最后一行出现TypeError:

必须是实数,不是str

我尝试使用其他 file (BT4864.xlsx) 效果很好。我应该怎么办?提前谢谢你

【问题讨论】:

    标签: python type-conversion numpy-ndarray


    【解决方案1】:

    您可以使用complex 将字符串转换为复杂值。

    import numpy as np
    import pandas as pd
        
    # Some toy data instead of reading lots from Excel.
    df = pd.DataFrame(dict(a=["4+2j", "2-3j"],
                           b=["3", "2j"]))
    df
    #       a   b
    # 0  4+2j   3
    # 1  2-3j  2j
    
    df2 = df.applymap(complex)
    df2
    
    #                     a                   b
    # 0  4.000000+2.000000j  3.000000+0.000000j
    # 1  2.000000-3.000000j  0.000000+2.000000j
    
    # Convert to NumPy.
    comp_ar = np.array(df2)
    # array([[4.+2.j, 3.+0.j],
    #        [2.-3.j, 0.+2.j]])
    

    【讨论】:

    • 嗨!恐怕我需要它在 Numpy 中,我试过它出错了 (AttributeError: module 'pandas' has no attribute 'applymap') 。那么根据我的代码,我错过了什么吗?
    • 要使其成为numpy,您只需将数据框提供给np.array - 我已经编辑了我的答案以明确显示这一点。使用applymap 得到的错误听起来像是在做pd.applymap,这是不正确的。 applymap 是 DataFrames 的一种方法,这就是我在回答中使用 df.applymap 的原因。你看得到差别吗?否则,如果您显示您尝试过的代码出错,那么也许我们可以修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多