Python数据处理从零开始----第二章(pandas)④数据合并和处理重复值

目录

第二章(pandas)

Python数据处理从零开始----第二章(pandas)①删除列
Python数据处理从零开始----第二章(pandas)②处理缺失数据
Python数据处理从零开始----第二章(pandas)③数据标准化(1)
Python数据处理从零开始----第二章(pandas)④数据合并和处理重复值

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

数据合并

在数据处理中,通常将原始数据分开几个部分进行处理而得到相似结构的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:层次化索引
横向连接
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
纵向连接
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

内连接

pd.concat([s1,s2],axis=1,join='inner')
Out[8]: 
   0  1
b  2  3
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=''来控制连接的键和合并的方式。

移除重复数据

  • 首先创建一个数据框
# -*- 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()函数,该函数返回的结果是一个数据框。


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列过滤重复项:

data['v1'] = range(7)
data
data.drop_duplicates(['k1'])
Out[10]: 
    k1  k2  v1
0  one   1   0
1  two   1   1

你可能感兴趣的:(Python数据处理从零开始----第二章(pandas)④数据合并和处理重复值)