gpt4 book ai didi

python - 将 pandas 过滤器应用于数据帧会得到一个充满 NaN 的数据帧

转载 作者:行者123 更新时间:2023-11-30 22:01:16 25 4
gpt4 key购买 nike

我不明白为什么会发生这种情况。我正在尝试将 pandas 过滤器应用于由 29k 行和 64 列组成的更大的 df。然而,我已经成功地在玩具 df 上重现了相同的错误,我将在此处用于解释目的。

假设您有以下 df:

df = pd.DataFrame({'contr': [1,2,3,4,5], 'type': [1356, 89, 134, 79, 117], 'total': [582747.2, 267492.4, 264894.6, -12727438.3, 7362748.6]})



contr type total
1 1356 582747.2
2 89 267492.4
3 134 264894.6
4 79 -127438.3
5 117 7362748.6

然后使用标准缩放器对其进行缩放:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
df_scaled = pd.DataFrame(df_scaled, columns = [df.columns])

现在让我们添加一列来进行过滤:

labels = [1,2,3,4,5]
df_scaled['labels'] = labels

如果我应用这些过滤器:

labels1 = df_scaled[df_scaled['labels'] == 1]
labels2 = df_scaled[df_scaled['labels'] == 2]
labels3 = df_scaled[df_scaled['labels'] == 3]
labels4 = df_scaled[df_scaled['labels'] == 4]

这就是我得到的:

labels1

Out[1]:

contr type total labels
NaN NaN NaN 1.0
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN

如果我对原始 df 应用相同的过滤器:

labels1 = df[df['labels'] == 1]
labels2 = df[df['labels'] == 2]
labels3 = df[df['labels'] == 3]
labels4 = df[df['labels'] == 4]

结果看起来符合预期:

标签1

输出[2]:

contr   type    total   labels
1 1356 582747.2 1

labels2

Out [3]:

contr type total labels
2 89 267492.4 2

其余过滤器依此类推。

我只是不明白为什么会发生这种奇怪的行为,但是当应用于缩放的数据帧时,pandas 过滤似乎失败了。

有谁知道为什么会发生这种情况以及如何避免它?我完全迷失在这里。

提前非常感谢您。

最佳答案

这将解决您的问题:

labels1 = df_scaled[(df_scaled['labels'] == 1).values]
labels2 = df_scaled[(df_scaled['labels'] == 2).values]
labels3 = df_scaled[(df_scaled['labels'] == 3).values]
labels4 = df_scaled[(df_scaled['labels'] == 4).values]

由于某种原因(我不知道为什么)您正在应用的过滤器没有转换为系列。

编辑1:

这样做的原因是因为标签列是一个多索引而不是数据帧的简单列。您可以通过创建df_scaled.columns来查看这一点。

如果您更改列名称df_scaled.columns = ['contr', 'total', 'type', 'labels'],则 df_scaled[df_scaled['labels' ] == 1] 会起作用。

编辑2:

如果你改变线路:

 df_scaled = pd.DataFrame(df_scaled, columns = [df.columns])

 df_scaled = pd.DataFrame(df_scaled, columns = df.columns)

你的问题已经解决了。

关于python - 将 pandas 过滤器应用于数据帧会得到一个充满 NaN 的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54107529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com