Q-Logo 我的学习笔记分享

Pandas数据整理实战 - 合并+填充+丢弃缺失

问题

在进行数据处理时,有时会需要将这样的两个表整理成一个表,如下图所示

pandas-merge-fillna-dropna.jpg

第一个表中为每日测量值,第二个表中是标准生效日期,第一个表中每日的测量值,是依据当日之前最新的标准进行测量得到的值。按照这个规则可以整理得到第三个表,这个表综合显示每日测量值所依据的标准和标准生效日期。

解决办法

使用pandas , 可以综合运用合并、填充和丢弃缺失等方法,来从表1和表2得到表3。完整的代码如下:

# 创建表1和表2的数据,分别保存在pd.DataFrame中

import pandas as pd

di = pd.date_range('2020-1-1', '2020-1-10', freq = 'D')

l = range(10,101,10)

df1 = pd.DataFrame({'date':di,'measured value':l})

df2 = pd.DataFrame({'effective date': pd.to_datetime(['2019-12-1','2020-1-5','2020-1-8']),'standard':['A','B','C']})

# 将前两个表合并

df3 = pd.merge(df1,df2,how='outer',left_on='date',right_on='effective date',sort=True)

pandas-merge.PNG

# 填充缺失值

df4 = df3.fillna(method='ffill')

pandas-fillna.PNG

# 丢弃多余的缺失值

dfm = df4.dropna()

pandas-dropna.PNG

经过上述整理,就得到了想要的表。由于上面每一步数据整理都会返回一个新的DataFrame,我们可以将上面的步骤合并为一句(Pandas链式方法 ):

pdm = pd.merge(df1,df2,how='outer',left_on='date',right_on='effective date',sort=True).fillna(method='ffill').dropna()