我不明白为什么我这行代码出错:
test_data :数组, sqft_living :一列。
在我要添加新列'log_sqft_living'的行中,该列应包含log'sqft_living'
test_data['log_sqft_living'] = log(test_data['sqft_living'][i] for i in range(len(test_data)))
在寻找类似的消息后,我发现答案应该是一个数字,这就是为什么我们必须使用float(x)进行格式化,但是当我使用它时,错误变成参数应该是一个字符串的数字。有人可以向我解释为什么会出现这些错误吗?
当我尝试log(test_data ['sqft_living'] [1](对于单个数字)时,我没有收到错误。
谢谢
答案 0 :(得分:1)
您正在将log
函数应用于生成器,但它只接受单个值。将行更改为列表推导(使其成为显式列表)并在理解中移动test_data['log_sqft_living'] = [ log(test_data['sqft_living'][i]) for i in range(len(test_data)) ]
,以便将其应用于每个元素:
{{1}}
答案 1 :(得分:1)
<expression> for <variable> in <data set>
- 列表理解,
您可以在此处阅读有关列表理解的更多信息:http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/
这意味着它产生一个列表结构 - 而函数log
期望得到一个数字。 math.log(x[, base])
您可以像这样重构您的陈述:
test_data['log_sqft_living'] = [log(test_data['sqft_living'][i]) for i in range(len(test_data))]
注意: test_data ['log_sqft_living']将包含此示例的列表
由于您没有提供有关上下文和您想要实现的内容的信息,因此我无法提供更好的解决方案