首页 > 解决方案 > 如何解决:float() 参数可以是字符串或数字,而不是“地图”

问题描述

这是我的简单代码:

我试过改变一些数据类型

@staticmethod
def load_from_file(filename, size_fit = 50):
    '''
    Loads the signal data from a file.
    filename: indicates the path of the file.
    size_fit: is the final number of sample axes will have.
    It uses linear interpolation to increase or decrease
    the number of samples.
    '''
    #Load the signal data from the file as a list
    #It skips the first and the last line and converts each number into an int
    data_raw = list(map(lambda x: int(x), i.split(" ")[1:-1]) for i in open(filename))
    #Convert the data into floats
    data = np.array(data_raw).astype(float)
    #Standardize the data by scaling it
    data_norm = scale(data)

它抛出一个错误:

data=np.array(data_raw).astype(float)
float() argument must be 'string' or 'number', not 'map' 

请帮我解决这个问题

标签: pythonnumpytypeerror

解决方案


您正在制作一个map对象列表。试试这个列表理解:

data_raw = [[int(x) for x in i.split()[1:-1]] for i in open(filename)]

split默认为空格分割,因此该参数是不必要的。另外,考虑使用with正确关闭您的文件:

with open(filename) as infile:
    data_raw = [[int(x) for x in i.split()[1:-1]] for i in infile]

在旁注中,numpy当你这样做时,将字符串转换为数字astype,所以你可以简单地做

with open(filename) as infile:
    data_raw = [i.split()[1:-1] for i in infile]

推荐阅读