我是机器学习的新手。我正在尝试使用 pandas/tensorflow 来处理一些数据。 我知道什么时候有数据:
+----+------+
| ID | asset|
+----+------+
| A | 1 |
| B | 2 |
| C | 3 |
| D | 4 |
+----+------+
我可以将“ Assets ”列作为列表 [1,2,3,4]
,然后将其传输到 [[1,0,0,0],[ 0,1,0,0],[0,0,1,0],[0,0,0,1]]
使用 tensorflow。
但是如果我有这样的数据:
+----+------+
| ID | asset|
+----+------+
| A | 1 |
| A | 2 |
| A | 3 |
| B | 1 |
+----+------+
还有一个看起来像这样的表格:
+----+------+
| ID | debt |
+----+------+
| D | 1 |
| D | 2 |
| D | 3 |
| A | 1 |
+----+------+
也就是说,我的客户 A 拥有 3 种不同类型的 Assets ,客户 D 拥有 3 种不同类型的债务。请注意,客户 D 甚至不存在于第一个表中。
第一个问题是我如何组合这些表来找到匹配的客户及其 Assets /债务。我只是加入那些 table 吗? (在 Pandas pd.merge()
中)
这样,客户 D 的 Assets 将具有空值。或者我应该只选择存在于每个表中的客户?我应该怎么做?
第二个问题是如何将表 A 传输到 [[1,1,1], [1,0,0]]
?
我希望描述有意义。如果我说错了,请纠正我。抱歉这个问题太长了:(
最佳答案
第一个问题:
这个问题的答案实际上取决于您的机器学习问题以及您希望如何预处理数据(如果您想删除缺少数据的样本或估算它们)。由于这可能是您需要准备数据集的第一个问题,我建议您查看 this .
现在,如果您决定要删除缺失值,您可以简单地继续进行内部合并
,如下所示:
df = pd.merge(df1,df2,"inner")
像那样,您将只取 df1
和 df2
之间的交集。
如果您选择估算缺失值,请执行外部合并
,如下所示:
df = pd.merge(df1,df2,"outer")
然后您应该能够按照自己喜欢的方式填充缺失值(链接中建议的方法是一种方法)。
第二个问题:
然而,对于这个问题,可能有一个更好的方法(但我完全忘记了它的名字,如果它确实存在的话)但这应该也很好:
a = df1.groupby('ID')['asset'].unique()
# to have something like
#ID
#A [1, 2, 4]
#B [1]
x = a.size
y = max([max(x) for x in a])
z = np.zeros((x,y))
# just instantiating the final matrix with the right shape and zeros
然后你可以使用numpy.put像这样将 1
实际放在正确的位置:
for row in range(x):
np.put(z[row],a[row]-1,1)
O/P(以你为例):
[[ 1. 1. 1.]
[ 1. 0. 0.]]
我希望这对您有所帮助,如果有任何问题或改进请发表评论。
关于python - 使用 Pandas 进行机器学习数据预处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45042321/