Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:float()参数必须是字符串或数字,而不是';列表';使用列表列表时_Python_List - Fatal编程技术网

Python TypeError:float()参数必须是字符串或数字,而不是';列表';使用列表列表时

Python TypeError:float()参数必须是字符串或数字,而不是';列表';使用列表列表时,python,list,Python,List,我已经为这个问题挣扎了一段时间,需要一些帮助。我试图从列表列表中向列表附加值。我得到一个TypeError:float()参数必须是字符串或数字,而不是“list”。我知道我正试图将一个列表传递给另一个列表,但我找不到解决方案 我首先阅读两个单独的列表,然后将它们组合成一个列表。我使用这个列表列表,使用is\u number函数解析并删除特定值 我最初使用了float(s),然后尝试了list(map(float(s))),但得到了相同的错误。我还尝试将a_数据、b_数据从列表中更改,但我的实际

我已经为这个问题挣扎了一段时间,需要一些帮助。我试图从列表列表中向列表附加值。我得到一个
TypeError:float()参数必须是字符串或数字,而不是“list”
。我知道我正试图将一个列表传递给另一个列表,但我找不到解决方案

我首先阅读两个单独的列表,然后将它们组合成一个列表。我使用这个列表列表,使用
is\u number
函数解析并删除特定值

我最初使用了
float(s)
,然后尝试了
list(map(float(s)))
,但得到了相同的错误。我还尝试将a_数据、b_数据从列表中更改,但我的实际数据集是a
df.values.tolist()
,因此它始终是列表形式

因此,不是:

a_data = [one_sample() for _ in range(1000)]
我的实际数据集为:

a_data = df[['AB','AC','AD','AE']].values.tolist()
因此,输入将始终位于列表中。代码的其余部分是相同的。示例数据集源自:

import random
from functools import partial
one_sample = partial(random.sample, range(80), 20)

a_data = [one_sample() for _ in range(1000)] #Makes a list
b_data = [one_sample() for _ in range(1000)] #Makes another list

data = [a_data,b_data] #Combine those lists to from one
我正在处理的列表的实际最终列表如下所示:

data = [[45.10031842, 'nan', -3.5165602060000003, 41.79799446, -24.616148100000004, -22.98303729, 'nan', 3.51273869, 28.44337707, 11.06472095, -35.54419066, 'nan', 45.73116662, 29.26475119, -40.68655635, 6.110571001, 'nan', -45.11483157, 3.001018117, -1.052283362, 38.61536724],
[65.74835477, 'nan', 73.73594438, 61.90991549, 67.06663915, 77.13941436, 'nan', 93.94853726, 56.51826591, 70.20955909999999, 73.07962202, 'nan', 69.78626105, 73.34402753, 64.72901307, 70.90387539, 'nan', 70.94140139, 42.78164288, 61.77394225, 72.07455255],
[45.15534694, 'nan', -3.3464740539999998, 41.78674915, -24.58808435, -23.02517617, 'nan', 3.5287456269999997, 28.38370261, 10.99883442, -35.47750429, 'nan', 45.85988623, 29.30369084, -40.77004615, 6.1017473010000005, 'nan', -45.29294224, 3.0151219680000003, -0.9927861370000001, 38.71278829],
[65.7684248, 'nan', 73.69043192, 61.69908417, 67.18671591, 77.17029694, 'nan', 93.89646426, 56.5427544, 70.19822793, 73.1451771, 'nan', 69.793868, 73.19566664, 64.95606388, 70.91007366, 'nan', 71.04051167, 42.83526579, 61.82365038, 72.11546062],
[45.23761992, 'nan', -3.1705542469999997, 41.78674915, -24.56060698, -23.05487575, 'nan', 3.5493760489999997, 28.31338862, 10.91910555, -35.41010968, 'nan', 45.85988623, 29.35832821, -40.83631919, 6.095069866, 'nan', -45.50045784, 3.042026157, -0.908282198, 38.79647675],
[65.7834979, 'nan', 73.63024857, 61.69908417, 67.31838918, 77.19810461, 'nan', 93.83429634, 56.58563081, 70.20044679, 73.19935612, 'nan', 69.793868, 73.03211884, 65.18572736, 70.90862232, 'nan', 71.14518241, 42.91278516, 61.89316922, 72.15835354]]


def is_number(s): #This function removes nan values from my list
    try:
        if str(s).lower() != "nan":
         list(map(float(s))) #Error is in this line
         return True
    except ValueError:
        pass
    return False

animate = [[],[]]

animate[0].append([float(_) for _ in data if is_number(_)]) #Error in this line
animate[1].append([float(_) for _ in data if is_number(_)]) #Error in this line

您提供的代码使
数据
成为两个列表的列表。这是因为您将
a_数据
b_数据
定义为两个单独的列表,然后将它们放入
数据
中。您应该做的是创建一个空列表,然后在该列表上调用
extend()
,并将
a\u data
作为参数(然后
b\u data
)。因此:

至于
is_number
函数,我很难理解它的功能(尤其是调用
map
),因此我推荐一个更简单的函数:

def is_num (num):
    try: float (num)
    except ValueError: return False
    else: return True

这可能会有帮助。看起来像“u”这是一个列表

animate[0].append([map(float, _) for _ in data]) 
animate[1].append([map(float, _) for _ in data]) 

在我看来,您的
数据
最终是一个列表列表([a_data,b_data],其中每个本身就是一个列表)。所以在你的最后两行

animate[0].append([float(_) for _ in data if is_number(_)])
\uuu
实际上仍然是一个列表列表,我认为您希望它是一个值列表。我猜这句话是这么说的

data = [a_data,b_data]
你真的想要更像

data = a_data+b_data
虽然这仍然会给你一个列表。可能需要更多的澄清才能完全回答这个问题


我总是发现列表理解比映射函数更容易。我不知道一个是否真的更好,但是
[float(x)for x in data]
似乎比
list(map(float,data))



还有一点需要注意:虽然语法是有效的,但是当我们不关心
\uu
是什么时,使用
\u
是标准的。然而,如果你真的用它来表示你要使用的东西,给它一个普通的变量名更标准。

也许你想要
list(map(float,s))
Same error@MichaelButscherCan yo发布列表“data”?我已经上传了前6个列表。所以每个人有3个。使用您的代码并将
(float(s))
更改为
(float,s)
会给我另一个TypeError:
TypeError:map类型的对象没有len()
@Punter345;更新的解决方案。你现在能试试吗?同样的错误抱歉@Rakesh<代码>类型错误:“map”类型的对象没有len()。我还需要通过is_number函数运行数据,因为它会删除所有
nan
值。我没有提到
is_number
函数,因为它与问题没有直接关系,也不想增加混淆。我的实际数据集具有
nan
值,这将在附加到最终列表之前删除这些值。不过我喜欢
.extend
功能。在我提到的第一部分中,我仍然会遇到同样的错误,您需要将
数据
从一个列表列表更改为一个长列表。如上所述,这可以通过
+
操作符完成。不要担心
is_num
函数,我只是为了帮助您而加入它。
data = a_data+b_data