利用Python进行数据分析笔记-数据加工(合并、整形、旋转及分层索引)

本文详细介绍了如何使用Python进行数据分析,包括合并数据集的concat和merge方法,数据库风格的DataFrame join操作,以及数据整形和旋转的pivot、stack、unstack等技巧。此外,还探讨了分层索引的重排序、层级排序和按层级进行的统计数据汇总。
摘要由CSDN通过智能技术生成

在很多应用中,数据通常散落在不同的文件或数据库中,并不方便进行分析。数据加工就是对这些数据的统一。

  • join:连接
  • combine:合并
  • reshape:整形

  • merge:归并

  • concatenate:串联

  • pivot:旋转

  • stack:堆叠
import pandas as pd
import numpy as np

合并数据集

pandas里有几种方法可以合并数据:

  1. pandas.merge 按一个或多个key把DataFrame中的行连接起来。这个和SQL或其他一些关系型数据库中的join操作相似。
  2. pandas.concat 在一个axis(轴)上,串联或堆叠(stack)多个对象。
  3. combine_first 实例方法(instance method)能合并相互之间有重复的数据,并用一个对象里的值填满缺失值

这里每一个都会给出一些例子。这些用法贯穿这本书。

1、Concatenating Along an Axis(沿着轴串联)

另一种结合方式被称为可互换的,比如concatenation, binding, or stacking(串联,绑定,堆叠)。Numpy中的concatenate函数可以作用于numpy 数组

arr = np.arange(12.).reshape((3, 4))
arr
array([[ 0.,  1.,  2.,  3.],
       [ 4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11.]])
# Numpy中的concatenate函数
np.concatenate([arr, arr], axis=1)
array([[ 0.,  1.,  2.,  3.,  0.,  1.,  2.,  3.],
       [ 4.,  5.,  6.,  7.,  4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11.,  8.,  9., 10., 11.]])
s1 = pd.Series([0, 1], index=['a', 'b'])
s2 = pd.Series([2, 3, 4], index=['c', 'd', 'e'])
s3 = pd.Series([5, 6], index=['f', 'g'])

df = pd.concat([s1, s2, s3], axis=1, keys=['one','two','three'])  # 横向
df
one two three
a 0.0 NaN NaN
b 1.0 NaN NaN
c NaN 2.0 NaN
d NaN 3.0 NaN
e NaN 4.0 NaN
f NaN NaN 5.0
g NaN NaN 6.0
# 截取部分索引
pd.concat([s1, s2, s3], axis=1, keys=['one','two','three'], join_axes=[['a', 'c', 'b', 'e']]) 
one two three
a 0.0 NaN NaN
c NaN 2.0 NaN
b 1.0 NaN NaN
e NaN 4.0 NaN
# 堆叠
df.stack()
a  one      0.0
b  one      1.0
c  two      2.0
d  two      3.0
e  two      4.0
f  three    5.0
g  three    6.0
dtype: float64

2、Database-Style DataFrame Joins(数据库风格的DataFrame Joins)

Merge或join操作,能通过一个或多个key,把不同的数据集的行连接在一起。这种操作主要集中于关系型数据库。pandas中的merge函数是这种操作的主要切入点

df1 = pd.DataFrame({
  'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
                    'data1': range(7)})
df1
data1 key
0 0 b
1 1 b
2 2 a
3 3 c
4 4 a
5 5 a
6 6 b
df2 = pd.DataFrame({
  'key': ['a', 'b', 'd'],
                    'data2': range(3)})
df2
data2 key
0 0 a
1 1 b
2 2 d
# 利用merge() 合并数据集
# merge会用两个对象中都存在的列名作为key(键),也可指定参数on
df = pd.merge(df1, df2, on='key')
df
data1 key data2
0 0 b 1
1 1 b 1
2 6 b 1
3 2 a 0
4 4 a 0
5 5 a 0

如果每一个对象中的列名不一定,我们可以分别指定

# merge默认是inner join(内连接),结果中的key是交集的结果,这里不会显示c/d
df3 = pd.DataFrame({
  'lkey': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 
                             'data1': range(7)})
df4 = pd.DataFrame({
  'rkey': ['a', 'b', 'd'], 
                             'data2': range(
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值