第八章-基于python的数据整理


第八章-基于python的数据整理

合并多个数据集

pandas提供以下几种方法合并多个数据集:

pandas.merge:基于一个键或多个键连接多个DataFrame的行

pandas.concat:按行或按列将不同的对象叠加到一起

combine_first:使用一个对象中的数据填充另一个对象中对应位置的缺失值

merge

默认连接为类似sql的inner join操作

利用how参数,实现其它连接方式,left join, right join, outer join

不指明使用某一列作为连接键

在这种情况下使用重叠列作为键进行连接

1
2
3
4
5
from pandas import DataFrame
import pandas as pd
df1 = DataFrame({'key':['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data2':range(7)})
df2 = DataFrame({'key':['a', 'b', 'd'], 'data2':range(3)})
pd.merge(df1, df2)

s9SNY6.png

指明连接键

1
2
// 等同于上例
pd.merge(df1,df2, on='key')

使用不同名的键连接

1
2
3
df3 = DataFrame({'lkey':['b','b', 'a', 'c', 'a','a', 'b'], 'data1':range(7)})
df4 = DaraFrame({'rkey':['a', 'b', 'd'], 'data2':range(3)})
pd.merge(df1,df2, left_on='lkey', right_on='rkey')

s9pOUI.png

how参数

1
pd.merge(df1, df2, how='outer')

s99YRK.png

使用多个键连接

1
2
3
4
5
6
7
left = DataFrame({'key1':['foo', 'foo', 'bar'],
'key2':['one', 'two', 'one'],
'lval':[1,2,3]})
right = DataFrame({'key1':['foo', 'foo', 'bar','bar'],
'key2':['one', 'one', 'one', 'two'],
'rval':[4,5,6,7]})
pd.merge(left, right, on=['key1', 'key2'], how='outer')

s9FQl6.png

使用index进行DataFrame合并

1
2
3
4
5
left1=DataFrame({'key':['a', 'b', 'a', 'a', 'b', 'c'],
'value':range(6)})
right1=DataFrame({'group_val':[3.5, 7]},
index=['a', 'b'])
pd.merge(left1, right1, left_on='key', right_index=True, how='outer')

sCQuGT.png

沿着横轴或纵轴串接

numpy的concatenate函数

NumPy库的concatenate函数用于串接起NumPy的原生数组

axis参数默认为0,沿着竖轴连接

1
2
3
import numpy as np
arr = np.arange(12).reshape((3,4))
np.concatenate([arr, arr], axis=1)

sCQ7oq.png

pandas的concat函数

用于Series数据类型
1
2
3
4
5
6
7
8
9
10
11
s1 = Series([0,1], index=['a','b'])
s2 = Series([2,3,4], index=['c', 'd', 'e'])
pd.concat([s1, s2])
>>>
a 0
b 1
c 2
d 3
e 4
pd.concat([s1, s2], axis=1) // 此时得到DataFrame对象,连接方式为outer join
>>>

sC1JC6.png

可以通过join参数修改连接方式

1
2
3
4
5
s1 = Series([0,1], index=['a','b'])
s3= Series([5,6], index=['f','g'])
s4 = pd.concat([s1*5,s3])
pd.concat([s1, s4], axis=1)
pd.concat([s1, s4], axis=1, join='inner')

sC8qHJ.png

用于DataFrame数据类型
1
2
3
df1 = DataFrame(np.arange(6).reshape(3,2),index=['a','b','c'],columns=['one', 'two'])
df2 = DataFrame(5+np.arange(4).reshape(2,2), index=['a','c'], columns=['three','four'])
pd.concat([df1, df2], axis=1)

sCbLlj.png

数据重塑

数据重塑:是指转换输入的数据结构,使其适合后续的分析

pandas提供了数据重塑的基本操作,这些操作被用于二维度表格数据

多级索引数据的重塑

DataFrame可以设置多级索引。对于多级索引的数据,pandas的stack方法将数据集的列旋转为行

stack

1
2
data=DataFrame(np.arange(6.reshape((2,3)),index=pd.Index(['ohio','colorado'], name='state'), columns=pd.Index(['one','two','three'], name='number'))
>>>data.stack()

unstack

1
2
result = data.stack()
result = data.unstack()

sCXL5V.png

默认情况下转换内层级别索引,通过传递一个级别的标号或级别的别称,可以指定要转换的级别,以下两种操作方式:

1
result.unstack(0)
1
result.unstack('state')

sCxoKe.png

应用pivot方法重塑数据

数据转换

移除重复数据

这两个方法默认以整行判断,也可以指定进行部分列判断重复

duplicated()

判断是否重复,返回一个bool型series

1
2
data = DataFrame({'k1':['zhongxing','Huawei']*3+['Huawei'], 'k2':[1,1,2,3,3,4,4]})
data.duplicated()

sCzXw9.png

drop_duplicates()

删除重复行

1
data.drop_duplicates()

sPSCQO.png

利用函数或隐射进行数据转换

值转换

重命名轴索引

离散化和面元划分

检测或过滤异常值

排列和随机采样

计算指标/哑变量


本文标题:第八章-基于python的数据整理

文章作者:TTYONG

发布时间:2021年01月02日 - 19:01

最后更新:2021年01月04日 - 11:01

原始链接:http://tianyong.fun/%E7%AC%AC%E5%85%AB%E7%AB%A0-%E5%9F%BA%E4%BA%8Epython%E7%9A%84%E6%95%B0%E6%8D%AE%E6%95%B4%E7%90%86.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%