【发布时间】:2017-01-09 16:38:04
【问题描述】:
我正在尝试编写一个函数,将数据集中的所有非数字列转换为数字形式。
数据集是列表的列表。
这是我的代码:
def handle_non_numerical_data(data):
def convert_to_numbers(data, index):
items = []
column = [line[0] for line in data]
for item in column:
if item not in items:
items.append(item)
[line[0] = items.index(line[0]) for line in data]
return new_data
for value in data[0]:
if isinstance(value, str):
convert_to_numbers(data, data[0].index(value))
显然[line[0] = items.index(line[0]) for line in data] 的语法无效,我无法弄清楚如何在迭代第一列数据时对其进行修改。
我不能使用 numpy,因为在这个函数运行之前数据不会是数字形式。
我该怎么做?为什么这么复杂?我觉得这应该比它简单得多......
也就是说,我想转这个:
[[M,0.455,0.365,0.095,0.514,0.2245,0.101,0.15,15],
[M,0.35,0.265,0.09,0.2255,0.0995,0.0485,0.07,7],
[F,0.53,0.42,0.135,0.677,0.2565,0.1415,0.21,9]]
进入这个:
[[0,0.455,0.365,0.095,0.514,0.2245,0.101,0.15,15],
[0,0.35,0.265,0.09,0.2255,0.0995,0.0485,0.07,7],
[1,0.53,0.42,0.135,0.677,0.2565,0.1415,0.21,9]]
请注意,第一列已从字符串更改为数字。
【问题讨论】:
-
只需使用您的列表理解创建一个新列表并替换旧列表
my_list = [comprehension for row in my_list] -
您需要将起始
[移动到items之前,即line[0] = [items.index(line[0]) for line in data]。但我想知道熊猫是否可以更有效地处理这个问题。如果您共享输入数据和所需输出的 sn-p,那将有所帮助。 -
要理解你想要做什么并不容易。你在哪里转换成数字?你是说如果它是一个字符串,你希望它被替换为该字符串的索引,否则保持原样?
-
你能用示例输入和预期输出编辑问题吗?
-
@N1B4I 已添加输入和预期输出
标签: python list type-conversion