热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【python】pandas库中的merge方法连接两个表后输出为空

importpandasaspd#读取数据,更换列表名datapd.read_table(u.data)datafeilds[userid,itemid
import pandas as pd

#读取数据,更换列表名
data = pd.read_table( 'u.data' )
datafeilds = ['user id', 'item id', 'rating', 'timestamp']
data.columns = datafeilds

#将文件中需要的数据分别存入两个列表
user_id = []
gender = []
userfile = open('u.user')
contents = userfile.readlines()
userfile.close()
for i in range(0,len(contents)):
    line = contents[i].split('|')
    user_id.append( line[0] )
    gender.append( line[2] )
    
#存入数据,为dataframe类型
dictuser = {'user id':user_id, 'gender':gender}
user = pd.DataFrame(dictuser)

rating = pd.merge( data, user, on = 'user id')
print rating


data和user的类型都是dataframe,用user id做为主键连接两张表,data和user中都有数据,
输出如下:
Empty DataFrame
Columns: [user id, item id, rating, timestamp, gender]
Index: []

怎么会是空的呢?

6 个解决方案

#1


因为两个表的user id没有一样的,注意它们的类型

#2


楼主 问题解决了吗 同求答案  

#3


引用 1 楼 uiuiy1 的回复:
因为两个表的user id没有一样的,注意它们的类型

print data.columns[0], user.columns[1]
print type(data.columns[0]), type(user.columns[1])

输出为
user id user id
 
都是string啊

在variable explorer查看rating,有如下错误
TypeError: ufunc 'invert' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

#4


#!/usr/bin/python
# -*- coding:utf-8 -*-

import pandas as pd
import numpy as np
 
#读取数据,更换列表名
data = np.loadtxt('u.data',delimiter = " ", dtype=str)
#data = pd.read_table( 'u.data' )
datafeilds = ['user id', 'item id', 'rating', 'timestamp']
#data.columns = datafeilds
df = pd.DataFrame(data,columns=datafeilds)
 
#将文件中需要的数据分别存入两个列表
user_id = []
gender = []
userfile = open('u.user')
contents = userfile.readlines()
userfile.close()
for i in range(0,len(contents)):
    line = contents[i].split('|')
    user_id.append( line[0] )
    gender.append( line[2] )
     
#存入数据,为dataframe类型
dictuser = {'user id':user_id, 'gender':gender}
user = pd.DataFrame(dictuser)
 
rating = pd.merge( df, user, on = 'user id')
print rating

u.data
11 1 1 y1
22 2 2 y1
33 3 3 y1
44 4 4 y1
55 5 5 y1
66 6 6 y1

u.user
11|m|f
22|f|f
33|m|f
44|m|f
55|f|f
66|f|f


#5


十分感谢!按照你的思路解决了问题。

不过,你给出的这一段
df = pd.DataFrame(data,columns=datafeilds)
运行到这就出错了

我在variable explorer看了data的值,显示只有1列,所以我自己用代码清理了一下。
data = np.loadtxt('u.data',delimiter = " ", dtype=str)
datafeilds = ['user id', 'item id', 'rating', 'timestamp']

sline = []

for line in data:
    sline.append( line.split('\t') )
    
array = np.array(sline)
df = pd.DataFrame(array,columns=datafeilds)


最后,还是想请教一下,为何会出现题目中的问题呢?
两个数据都是
user id也都是
到底哪里不一样呢?

再次感谢!

#6


因为看不到你的表格数据,我估计可能是你user id 中的数据没有相同的,这样就会导致merge以后为空表。

推荐阅读
  • Problemexplanation: ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?Input测 ... [详细]
  • markdown编辑器利用`markdown_js`开源库实现todolist小项目的markdown日记本功能todolist小项目地址之前的介绍随笔todoListmarkdown-js仓库遇到的 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
author-avatar
津pig
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有