目录
第三章(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
网友评论