【问题标题】:I have converted a continuous feature to categorical. I am getting NaN in Pandas我已将连续特征转换为分类特征。我在 Pandas 中得到 NaN
【发布时间】:2019-09-19 17:53:41
【问题描述】:

我已将连续数据集转换为分类数据。当转换后连续数据的值为 0.0 时,我会得到 nan 值。下面是我的代码

import pandas as pd
import matplotlib as plt
df = pd.read_csv('NSL-KDD/KDDTrain+.txt',header=None)
data = df[33]
bins = [0.000,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,0.85,0.90,0.95,1.00]
category = pd.cut(data,bins)
category = category.to_frame()
print (category)

如何转换这些值,以免得到 NaN 值。我附上了两个屏幕截图,以便更好地了解实际数据的外观以及转换数据的外观。 This is the main datasetThis is the what it becomes after using bins and pandas.cut()。 “0.00”如何与数据集中的其他值保持一致。

【问题讨论】:

  • Stack Overflow Discourages screenshots of code, errors & data。由于包含不必要的屏幕截图,该问题可能会被否决。通过使用屏幕截图,您会阻止任何人帮助您。没有人想从屏幕截图中重新输入您的内容。此外,没有来自NSL-KDD/KDDTrain+.txt 的样本数据,很难重现错误。
  • 添加fillna(0)??
  • 你的垃圾箱可以写成bins = np.arange(0,1.05,0.05)
  • fillna 不工作我试过了。

标签: python pandas


【解决方案1】:

使用pd.cut时,可以指定参数include_lowest = True。这将使第一个内部左包含(它将包含 0 值,因为您的第一个间隔以 0 开头)。

所以在你的情况下,你可以将你的代码调整为

import pandas as pd
import matplotlib as plt
df = pd.read_csv('NSL-KDD/KDDTrain+.txt',header=None)
data = df[33]
bins = [0.000,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,0.85,0.90,0.95,1.00]
category = pd.cut(data,bins,include_lowest=True)
category = category.to_frame()
print (category)

pd.cut 的文档参考

【讨论】:

  • 我一定会尝试这个,但我所做的是在垃圾箱中包含 -1.0 并且它有效。我只是扩展了最小值
  • 是的,应该可以。如果您使用include_lowest=True,您将拥有(-0.001, 0.05] 而不是NaN。它基本上会自动为您扩展最小值。
  • 如果这有效并且有帮助,请考虑将其标记为正确答案:) @user6565467
  • 是的,感谢您的帮助。并且自动包含最小值,并且不显示任何 NaN
猜你喜欢
  • 1970-01-01
  • 2019-11-13
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 2022-01-05
  • 2018-01-04
  • 1970-01-01
相关资源
最近更新 更多