前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据处理从零开始----第三章(pandas)④数据合并和处理重复值目录数据合并移除重复数据

Python数据处理从零开始----第三章(pandas)④数据合并和处理重复值目录数据合并移除重复数据

作者头像
用户1359560
发布2018-12-19 16:29:00
3.3K0
发布2018-12-19 16:29:00
举报
文章被收录于专栏:生信小驿站生信小驿站

===============================================

数据合并

在数据处理中,通常将原始数据分开几个部分进行处理而得到相似结构的Series或DataFrame对象,我们该如何进行纵向合并它们?这时我们可以选择用pd.concat()方式极易连接两个或两个以上的Series或DataFrame对象。如下是该函数的参数解读:

pd.concat(objs, axis=0, join=’outer’, join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)

参数说明:
  • objs:连接对象,多以列表、字典传入
  • axis:轴向,0代表纵向连接,1,代表横向连接
  • join:连接方式,共有’inner’,’left’,right’,’outer’
  • join_axes:参与连接的索引
  • ignore_index:是否忽略索引
  • keys:层次化索引
横向连接
代码语言:javascript
复制
import pandas as pd

s1=pd.Series([1,2,3],index=list('abc'))
s2=pd.Series([3,4,5],index=list('bde'))

pd.concat([s1,s2])
Out[6]: 
a    1
b    2
c    3
b    3
d    4
e    5
dtype: int64
纵向连接
代码语言:javascript
复制
pd.concat([s1,s2],axis=1)
__main__:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

Out[7]: 
     0    1
a  1.0  NaN
b  2.0  3.0
c  3.0  NaN
d  NaN  4.0
e  NaN  5.0

内连接

代码语言:javascript
复制
pd.concat([s1,s2],axis=1,join='inner')
Out[8]: 
   0  1
b  2  3
代码语言:javascript
复制
import pandas as pd
from pandas import Series,DataFrame
dict1={
    'key':['a','b','c'],
    'col1':range(3)
}
df1 = DataFrame(dict1)
df1
Out[18]: 
  key  col1
0   a     0
1   b     1
2   c     2
dict2={
    'key':['b','c','d'],
    'col2':range(1,4)
}
df2 =DataFrame(dict2)      
df2
Out[19]: 
  key  col2
0   b     1
1   c     2
2   d     3
dat = pd.merge(df1,df2)
dat
Out[14]: 
  key  col1  col2
0   b     1     1
1   c     2     2

pandas默认寻找共同的column,然后合并共同的观测值,但是可以根据,on='',和how=''来控制连接的键和合并的方式。

移除重复数据

  • 首先创建一个数据框
代码语言:javascript
复制
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 29 01:33:46 2018

@author: czh
"""
%clear
%reset -f
# In[*]
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import os
import numpy as np
import pandas as pd
# In[*]
data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'],
                       'k2': [1, 1, 2, 3, 3, 4, 4]})
data


data.duplicated()
0    False
1    False
2    False
3    False
4    False
5    False
6     True
dtype: bool

通过以上我们发现最后一行(第七行)存在一个完全重复的行,一般情况下,我们需要删除掉这行,主要通过drop_duplicates()函数,该函数返回的结果是一个数据框。

代码语言:javascript
复制
data.drop_duplicates()
Out[9]: 
    k1  k2
0  one   1
1  two   1
2  one   2
3  two   3
4  one   3
5  two   4

这两个方法默认会判断全部列,你也可以指定部分列进行重复项判断(一般情况下,我们希望去掉某一列重复的观测值),假设我们还有一列值,且只希望根据k1列过滤重复项:

代码语言:javascript
复制
data['v1'] = range(7)
data
data.drop_duplicates(['k1'])
Out[10]: 
    k1  k2  v1
0  one   1   0
1  two   1   1
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据合并
  • 移除重复数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档