将值更改为组的Python问题

2024-09-27 00:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有不同属性的数据集。这些属性之一是温度。我的体温范围是零下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,更改后温度为5的记录,即正确执行分配


Tags: 数据代码机器属性方式记录温度loc
3条回答

看起来您正在操作一个数据帧。您是否尝试过使用应用功能

就我个人而言,我会这样做(事实上,有一个新的专栏)

1。编写一个函数来处理该值

def _check_temperature_range(x):
  if x <= -30:
    return 0
  elif x <= -10:
    return 1
  # so on and so forth...

2。将该函数应用于数据帧的列

df[new_column] = df[column].apply(lambda x: _check_temperature_range(x))

结果应该反映在new_column或旧列中,如果您使用相同的column

我相信这与代码的顺序有关

温度为-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等

我认为您的代码在同一行上应用了多次。 以第一行为例: 温度=-3等于2 但是温度=2等于3

因此,我建议在数据框中创建一个新列

相关问题 更多 >

    热门问题