我正在合并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
我检查了什么:
int64
。我怀疑原因:
数据更新
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']}
答案 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。