暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python数据分析笔记#8.2.4 “打补丁”

Yuan的学习笔记 2022-02-10
655



「目录」

数据规整:聚合、合并和重塑

Data Wrangling: Join, Combine, and Reshape

  • 8.1 => 层次化索引
  • 8.2 => 合并数据集

--------> 数据库风格的DataFrame合并

--------> 索引上的合并

--------> 轴向连接

--------> 合并重叠数据

  • 8.3 => 重塑和轴向旋转

合并重叠数据

本篇涉及到的函数方法:

  • np.where()
  • DataFrame.combine_first()

看完这一部分的内容你就会觉得,与其说是合并重叠数据,不如叫做“打补丁”更贴切有趣些,但还是按照原书的标题来吧。

Numpy中有一个np.where函数,其中有三个参数:

np.where(condition, x, y)

复制

第一个参数为条件,当条件成立时返回x,若条件不成立则返回y

来看个例子吧,下面我们先创建了两个索引重叠的DataFrame:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: a = pd.Series([np.nan, 2.5, np.nan, 3.5, 4.5, np.nan], index=['f''e''d''c''b''a'])

In [4]: b = pd.Series(np.arange(len(a), dtype=np.float64), index=['f''e''d''c''b''a'])

In [5]: b[-1] = np.nan

In [6]: a
Out[6]:
f    NaN
e    2.5
d    NaN
c    3.5
b    4.5
a    NaN
dtype: float64

In [7]: b
Out[7]:
f    0.0
e    1.0
d    2.0
c    3.0
b    4.0
a    NaN
dtype: float64

In [8]: np.where(pd.isnull(a), b, a)
Out[8]: array([0. , 2.5, 2. , 3.5, 4.5, nan])

复制

Series有一个combine_first方法,实现的也是一样的功能,还带有pandas的数据对齐:

In [9]: b[:-2].combine_first(a[2:])
Out[9]:
a    NaN
b    4.5
c    3.0
d    2.0
e    1.0
f    0.0
dtype: float64

复制

对于DataFrame,combine_first自然也会在列上做同样的事情,因此你可以将其看作:用DataFrame_B的数据为DataFrame_A的缺失数据“打补丁”

In [10]: df1 = pd.DataFrame({'a':[1., np.nan, 5., np.nan], 'b':[np.nan, 2., np.nan, 6.], 'c':range(2, 18, 4)})

In [11]: df2 = pd.DataFrame({'a':[5., 4., np.nan, 3., 7.], 'b':[np.nan, 3., 4., 6., 8.]})

In [12]: df1
Out[12]:
     a    b   c
0  1.0  NaN   2
1  NaN  2.0   6
2  5.0  NaN  10
3  NaN  6.0  14

In [13]: df2
Out[13]:
     a    b
0  5.0  NaN
1  4.0  3.0
2  NaN  4.0
3  3.0  6.0
4  7.0  8.0

In [14]: df1.combine_first(df2)
Out[14]:
     a    b     c
0  1.0  NaN   2.0
1  4.0  2.0   6.0
2  5.0  4.0  10.0
3  3.0  6.0  14.0
4  7.0  8.0   NaN

复制


-END-


往期回顾


轴向链接




Stay hungry, stay foolish


文章转载自Yuan的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论