Pandas仅合并返回列名

时间:2016-02-20 23:25:50

标签: python pandas

我正在合并pandas中的两个数据框。

df.head()
index   business_id label
0   204149  3034    0
1   48723   3034    0
2   94586   3034    0
3   74369   3034    0
4   95287   3034    0

lst.head()
index   path_to_image
0   10  ./train_photos/10.jpg
1   100003  ./train_photos/100003.jpg
2   100007  ./train_photos/100007.jpg
3   100008  ./train_photos/100008.jpg
4   100009  ./train_photos/100009.jpg

它只返回列的头部。

pd.merge(lst, df, on='index')
index   path_to_image   business_id label

我检查了什么:

  1. 行数相等。
  2. 从一个数据中选择多个值,我发现它们匹配第二个数据中的行。
  3. 两列均为int64
  4. 我怀疑原因:

    1. 缺少价值观?
    2. 重复?
    3. 数据更新

      Out[515]:
      {'business_id': [3034, 3034, 3034, 3034, 3034],
       'index': [204149, 48723, 94586, 74369, 95287],
       'label': [0, 0, 0, 0, 0]}
      
      Out[516]:
      {'index': ['10', '100003', '100007', '100008', '100009'],
       'path_to_image': ['./train_photos/10.jpg',
        './train_photos/100003.jpg',
        './train_photos/100007.jpg',
        './train_photos/100008.jpg',
        './train_photos/100009.jpg']}
      

1 个答案:

答案 0 :(得分:2)

请注意df['index']中的值是整数:

 'index': [204149, 48723, 94586, 74369, 95287]

lst['index']中的值是字符串:

'index': ['10', '100003', '100007', '100008', '100009']

整数永远不等于字符串,因此没有匹配项和

pd.merge(df, lst, on=['index'])

将返回一个空的DataFrame。要解决此问题,请将lst['index']转换为ints:

lst['index'] = lst['index'].astype(int)
合并之前

根据您发布的示例数据,pd.merge即使在更改lst['index']的dtype后也会返回空的DataFrame,因为[204149, 48723, 94586, 74369, 95287]中的所有值都不匹配{{1}中的任何值1}}。如果您的完整数据框具有匹配的[10, 100003, 100007, 100008, 100009]值,那么index将返回非空的DataFrame。