我是机器学习的新手。我正在尝试使用pandas/tensorflow来处理一些数据。我知道当我有数据时:
+----+------+| ID | asset|+----+------+| A | 1 || B | 2 || C | 3 || D | 4 |+----+------+
我可以直接获取”asset”列作为列表[1,2,3,4]
,然后使用tensorflow将其转换为[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
。
但如果我的数据看起来像这样:
+----+------+| ID | asset|+----+------+| A | 1 || A | 2 || A | 3 || B | 1 |+----+------+
还有另一张表看起来像这样:
+----+------+| ID | debt |+----+------+| D | 1 || D | 2 || D | 3 || A | 1 |+----+------+
也就是说,我有客户A拥有三种不同类型的资产,而客户D拥有三种不同类型的债务。请注意,客户D甚至不在第一张表中。
第一个问题是如何合并这些表以找到匹配的客户及其资产/债务。我只是将这些表连接起来吗?(在pandas中使用pd.merge()
)这样客户D的资产将会有空值。还是我应该只选择在每张表中都存在的客户?我应该怎么做?
第二个问题是如何将表A转换为[[1,1,1], [1,0,0]]
?
希望我的描述有意义。如果我说错了什么,请纠正我。抱歉问题太长了:(
回答:
第一个问题:
答案真的取决于你的机器学习问题以及你希望如何预处理数据(如果你想删除缺失数据的样本或对其进行填补)。由于这可能是你第一次需要准备数据集,我建议你看看这个。
现在,如果你决定要删除缺失值,你可以直接进行内连接
,像这样:
df = pd.merge(df1,df2,"inner")
这样你只会取df1
和df2
的交集。
如果你选择填补缺失值,进行外连接
,像这样:
df = pd.merge(df1,df2,"outer")
然后你就可以根据自己的喜好填补缺失值(链接中提出的方法是一种方式)。
第二个问题:
对于这个问题,可能有一个更好的方法(但如果确实存在的话,我完全忘记了它的名字),但这应该也行得通:
a = df1.groupby('ID')['asset'].unique()# 得到类似于#ID#A [1, 2, 4] #B [1]x = a.sizey = max([max(x) for x in a])z = np.zeros((x,y))# 只是用正确的形状和零来初始化最终矩阵
然后你可以使用numpy.put来在正确的位置放置1's
,像这样:
for row in range(x): np.put(z[row],a[row]-1,1)
输出(对于你的示例):
[[ 1. 1. 1.] [ 1. 0. 0.]]
希望这对你有帮助,如果有任何问题或改进,请留言评论。