使用Pandas进行机器学习数据预处理

时间:2017-07-11 18:41:55

标签: python mysql pandas machine-learning tensorflow

我是机器学习的新手。我试图使用pandas / tensorflow来处理一些数据。 我知道什么时候有数据:

+----+------+
| ID | asset|
+----+------+
|  A | 1    |
|  B | 2    |
|  C | 3    |
|  D | 4    |
+----+------+

我可以得到col" 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有3种不同类型的资产,客户D有3种不同类型的债务。请注意,客户端D甚至不存在于第一个表中。

第一个问题是我如何将这些表组合起来找到匹配的客户资产/债务。我只是加入那些桌子吗? (在熊猫pd.merge()) 这样,客户端D将具有资产的空值。或者我应该只选择每个表中存在的客户端?我该怎么办?

第二个问题是如何将表格A转移到[[1,1,1], [1,0,0]]

我希望描述有意义。如果我说错了,请纠正我。抱歉,这个问题很长:(

1 个答案:

答案 0 :(得分:1)

第一个问题

答案真的取决于您的机器学习问题以及您希望如何预处理数据(如果您想删除缺少数据的样本或将其归类)。由于这可能是您需要准备数据集的第一个问题,我建议您查看this

现在,如果您决定要删除缺失的值,那么您可以继续执行此类inner merge

df = pd.merge(df1,df2,"inner")

就像你只会采用df1df2之间的交集。

如果您选择估算缺失值,请执行outer merge之类的操作:

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.put1's实际放在正确的位置,如下所示:

for row in range(x):
    np.put(z[row],a[row]-1,1)

O / P(例如):

[[ 1.  1.  1.]
 [ 1.  0.  0.]]

我希望这有用,如果有任何问题或改进,请发表评论。