我有一个具有不同属性的数据集。其中一个属性是温度。我的温度范围是-30到大约30度。我想做一个机器学习研究,我想把温度分成不同的组。原则:低于-30: 0,-30到-10: 1等等。下面是我写的代码,但它的工作方式并不像我所希望的那样。数据类型是: int32,我用float64转换了它。
dane = [treningowy_df]
for zbior in dane:
zbior['temperatura'] = zbior['temperatura'].astype(int)
zbior.loc[ zbior['temperatura'] <= -30, 'temperatura'] = 0
zbior.loc[(zbior['temperatura'] > -30) & (zbior['temperatura'] <= -10), 'temperatura'] = 1
zbior.loc[(zbior['temperatura'] > -10) & (zbior['temperatura'] <= 0), 'temperatura'] = 2
zbior.loc[(zbior['temperatura'] > 0) & (zbior['temperatura'] <= 10), 'temperatura'] = 3
zbior.loc[(zbior['temperatura'] > 10) & (zbior['temperatura'] <= 20), 'temperatura'] = 4
zbior.loc[(zbior['temperatura'] > 20) & (zbior['temperatura'] <= 30), 'temperatura'] = 5
zbior.loc[ zbior['temperatura'] > 30, 'temperatura'] = 6例如:在执行代码之前,记录1的温度为-3,而在应用代码之后,记录1的温度为: 3.为什么?变化前的温度记录:变化后的22度,即任务正确执行。
发布于 2020-05-27 12:39:34
看上去你在操纵数据。您试过使用应用函数吗?
就我个人而言,我会这样做(事实上,用一个新的专栏)。
1.编写一个函数来处理值
def _check_temperature_range(x):
if x <= -30:
return 0
elif x <= -10:
return 1
# so on and so forth...2.将该函数应用到dataframe的列上。
df[new_column] = df[column].apply(lambda x: _check_temperature_range(x))如果您使用相同的new_column,则结果应该反映在column或旧列中。
发布于 2020-05-27 12:32:20
我相信这和你的代码顺序有关。
一个温度-3的记录,被分配为2-
zbior.loc[(zbior['temperatura'] > -10) & (zbior['temperatura'] <= 0), 'temperatura'] = 2然后,在下一行中,它再次被发现在0到10之间,并再次被分配为3-
zbior.loc[(zbior['temperatura'] > 0) & (zbior['temperatura'] <= 10), 'temperatura'] = 3一种解决方案是分配一个数字,它不会使你“跳转”一个类别。
所以,对于-3,我会分配0,这样它就会停留在周围。
在那之后,你可以再做一次,然后改变到你想要的实际数字,如0->3等。
发布于 2020-05-27 12:33:06
我认为您的代码在同一行上应用了多次。以第一行为例: temp = -3给出2,然后temp =2给出3
因此,我建议在dataframe中创建一个新列。
https://stackoverflow.com/questions/62043130
复制相似问题