社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

夜神moon • 5 年前 • 476 次点击  

目录

第三章(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

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/0gFJfFDf23
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26945
 
476 次点击