python两表连接数据处理的小技巧--merge
来源:互联网 发布:js判断只能输入数字 编辑:程序博客网 时间:2024/05/20 01:11
- python两表连接数据处理的小技巧merge
- python环境创建
- 本地读取
python两表连接数据处理的小技巧–merge
今天在工作的时候, 碰到两个表需要做连接, 很简单的问题, pd.merge
就可以解决问题. 但是在检查数据的时候却发现很多没有merge上, 明明要连接的字段在两个表中都有记录, 为什么merge出来的结果有缺失呢?仔细检查数据才发现, 有些数据字段是以0开头的, 例如0021
等. python在读取这些数据的时候会忽略掉最前面的多个0, 所以会出现上述情况?
这个问题该怎么处理? 其实很简单, code
最容易直观说明与解决问题了.
1. python环境创建
data1 = pd.DataFrame({'id': ['001','002','031','421'], 'name':['alice','bruce','cook','daisy']})data1
Out[1]:
data1.dtypes
Out[2]:
id objectname objectdtype: object
data2 = pd.DataFrame({'id': ['001','002','031'], 'label':[1,2,3]})data2
Out[3]:
merge_data1 = pd.merge(data1, data2, on='id',how='left')merge_data1
Out[4]:
2. 本地读取
这个输出没有什么问题, 和预想的结果保持一致;
接着, 我们创建两个临时数据data1
和 data2
, 然后我们另存, 改为从本地读取文件, 看看是什么效果.
temp1 = pd.read_csv('./data/test1019/data1.txt')temp1
Out[5]:
temp2 = pd.read_csv('./data/test1019/data2.txt',dtype={'id':np.str})temp2
Out[6]:
merge_data2 = pd.merge(temp1, temp2, on='id',how='left')merge_data2
Out[7]:
比较理想的结果是: python将两个文件中所有以0
打头的字段都忽略掉, 这样标准一样, merge的结果还是一致的.
不理想的结果, 就如merge_data2
的结果, python
将temp1
的id
字段中的0忽略掉, 但是temp2
的id
字段中的0还是正常显示, 这样就会造成结果输出与预想的不一致, 导致后续所有的结果都是错的.
那么问题来了, 像这种小量的数据, 我们能直接观察到数据读写的问题, 如今大数据时代, 我们该如何规避此类问题呢? 在上面的代码中, 已经给出了一种解决方案.
#方案1: 使用lambda函数temp3 = pd.read_csv('./data/test1019/data1.txt',converters={'id': lambda x: str(x)})temp3
Out[8]:
#方案2: 使用dtype对特定列进行制定数据类型temp4 = pd.read_csv('./data/test1019/data2.txt',dtype={'id':np.str})temp4
Out[9]:
merge_data3 = pd.merge(temp3, temp4, on='id',how='left')merge_data3
因此, 为了保证数据原有的格式, 对一些会被各种编程语言特殊处理掉的数据, 一定要先声明数据类型.
本文为博主原创文章,未经博主允许不得转载
如若转载, 请注明出处
- python两表连接数据处理的小技巧--merge
- python 数据处理的小技巧
- python之数据处理小技巧
- Merge 的小技巧
- python-数据处理-merge函数
- MapReduce数据处理两表join连接
- MapReduce数据处理两表join连接
- 各种对数据处理的小技巧
- MapReduce数据处理两表join连接 (Ruduce端连接)
- Python数据处理技巧
- shell里取oracle表的值和连接roacle进行数据处理两种方式
- 收藏夹排序的小技巧两则
- python的一个小技巧
- 我的Python小技巧
- 实用的python小技巧
- Python的各种小技巧
- Python的冷技巧小技巧
- Python的一些小技巧小知识
- CUICatalog: Invalid asset name supplied: '' 解决办法
- Hadoop 读写文件源码分析
- 这几个绝招教你轻松学IT
- 3种交叉验证
- 「游戏引擎Mojoc」(2)C代码风格
- python两表连接数据处理的小技巧--merge
- 《DOS命令一日通》第七章 管道命令与DOS过滤器
- HTML 规范
- window对象下获取的屏幕宽高
- IntelliJ IDEA中实现SpringBoot热部署
- Android 收藏&笔记
- centos7 编写防火墙增加和删除端口脚本
- Codevs1995黑魔法师之门
- Linux软件安装管理(一)