从列表中剥离所有字符串并生成Numpy数组



我有一个列表,它包含保存字符串和浮点数据的字典,例如[{a:'DOB', b:'weight', c:height}, {a:12.2, b:12.5, c:11.5}, {a:'DOB', b:33.5, c:33.2}]

我想把它转换成numpy,去掉所有的键和字符串值,这样只有浮点值才能传递到numpy数组中,然后我想用它来计算一些统计数据。例如[[12.2,12.5,11.5], ['', 33.5, 33.2]]如果整行是字符串,它将被省略,但如果一行中的项是字符串,则应保持null值。

我不知道如何做到这一点。

这个答案结合了评论中的所有建议。该过程循环遍历字典的初始列表,并执行以下操作:

  1. 创建一个新的列表。使用列表压缩,将每个字典值保存为float,或将非float的值保存为None
  2. 统计新列表中浮点值的#,如果至少有1个浮点值,则进行追加
  3. 使用np.array((从新列表中创建一个数组

我在原始文章的起始代码中添加了缺失的引号
此外,在未来的帖子中,你至少应该努力编写一些代码,然后在遇到困难时寻求帮助。

test_d = [{'a':'DOB', 'b':'weight', 'c':'height'}, 
{'a':12.2, 'b':12.5, 'c':11.5}, 
{'a':'DOB', 'b':33.5, 'c':33.2}] 
arr_list = []    
for d in test_d:
d_list = [x if isinstance(x, float) else None for x in d.values()]

check = sum(isinstance(x, float) for x in d_list)
if check > 0:
arr_list.append(d_list) 
print (arr_list)

arr = np.array(arr_list)
print(arr)

作为参考,以下是转换为带有if/else逻辑的标准循环的列表压缩:

for d in test_d:
# List compression converted to a loop with if/else below:
d_list = []
for x in d.values():
if isinstance(x, float):
d_list.append(x)
else:
d_list.append(None)

最新更新