技巧 Pandas 数据填充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技巧 Pandas 数据填充相关的知识,希望对你有一定的参考价值。

参考技术A 课程学习: Pandas 数据处理基础入门

除了直接填充值,我们还可以通过参数,将缺失值前面或者后面的值填充给相应的缺失值。例如使用缺失值前面的值进行填充:

或者是后面的值:

可以看到,连续缺失值也是按照前序数值进行填充的,并且完全填充。这里,我们可以通过 limit= 参数设置连续填充的限制数量:

除了上面的填充方式,还可以通过 Pandas 自带的求平均值方法等来填充特定列或行。举个例子:

插值是数值分析中一种方法。简而言之,就是借助于一个函数(线性或非线性),再根据已知数据去求解未知数据的值。插值在数据领域非常常见,它的好处在于,可以尽量去还原数据本身的样子。我们可以通过 interpolate() 方法完成线性插值。

对于 interpolate() 支持的插值算法,也就是 method= 。下面给出几条选择的建议:

除了上面提到的一些方法和技巧,实际上 Pandas 常用的还有:

--- End ---

使用 Pandas 填充缺失的数据

【中文标题】使用 Pandas 填充缺失的数据【英文标题】:Fill in the missing data using Pandas 【发布时间】:2020-02-28 23:40:09 【问题描述】:

使用 Pandas 填充缺失数据的最佳方法是什么。我有一个缺少退出时间或进入时间的访客列表。

visitor entry            exit
A   16/02/2016 08:46    16/02/2016 09:01
A   16/02/2016 09:20    16/02/2016 17:24
A   17/02/2016 09:12    17/02/2016 09:42
A   17/02/2016 09:55    NaT
A   17/02/2016 12:42    17/02/2016 12:56
A   17/02/2016 13:02    17/02/2016 17:32
A   17/02/2016 17:44    17/02/2016 18:24
A   18/02/2016 07:59    18/02/2016 16:40
A   18/02/2016 16:53    NaT
A   NaT                 19/02/2016 09:11
A   19/02/2016 09:27    19/02/2016 11:26
A   19/02/2016 12:28    19/02/2016 17:12
A   20/02/2016 08:44    20/02/2016 08:58
A   20/02/2016 09:16    20/02/2016 17:21

【问题讨论】:

你想在什么日期完成?标准是什么? 【参考方案1】:

您可以使用DataFrame.ffill + DataFrame.bfill 在进入/退出的同时完成:

df[['entry','exit']]=df[['entry','exit']].ffill(axis=1).bfill(axis=1)
print(df)
   visitor               entry                exit
0        A 2016-02-16 08:46:00 2016-02-16 09:01:00
1        A 2016-02-16 09:20:00 2016-02-16 17:24:00
2        A 2016-02-17 09:12:00 2016-02-17 09:42:00
3        A 2016-02-17 09:55:00 2016-02-17 09:55:00
4        A 2016-02-17 12:42:00 2016-02-17 12:56:00
5        A 2016-02-17 13:02:00 2016-02-17 17:32:00
6        A 2016-02-17 17:44:00 2016-02-17 18:24:00
7        A 2016-02-18 07:59:00 2016-02-18 16:40:00
8        A 2016-02-18 16:53:00 2016-02-18 16:53:00
9        A 2016-02-19 09:11:00 2016-02-19 09:11:00
10       A 2016-02-19 09:27:00 2016-02-19 11:26:00
11       A 2016-02-19 12:28:00 2016-02-19 17:12:00
12       A 2016-02-20 08:44:00 2016-02-20 08:58:00
13       A 2016-02-20 09:16:00 2016-02-20 17:21:00

编辑

DataFrame.notna + DataFrame.all 执行 boolean indexing 过滤到具有 NaT 值的 ros 以计算差异的平均值

#filtering valid data
df_valid=df[df.notna().all(axis=1)]
#Calculating diff
time_dif=df_valid[['entry','exit']].diff(axis=1).exit
print(time_dif)

0    00:15:00
1    08:04:00
2    00:30:00
4    00:14:00
5    04:30:00
6    00:40:00
7    08:41:00
10   01:59:00
11   04:44:00
12   00:14:00
13   08:05:00
Name: exit, dtype: timedelta64[ns]

#Calculatin mean        
time_dif_mean=time_dif.mean()
print('This is the mean of time in: ', time_dif_mean)

This is the mean of time in:  0 days 03:26:54.545454

用平均值填充缺失值

#roud to seconds( optional)
time_dif_mean_round_second=time_dif_mean.round('s')

df['entry'].fillna(df['exit']-time_dif_mean_round_second,inplace=True)
df['exit'].fillna(df['entry']+time_dif_mean_round_second,inplace=True)
print(df)

输出:

   visitor               entry                exit
0        A 2016-02-16 08:46:00 2016-02-16 09:01:00
1        A 2016-02-16 09:20:00 2016-02-16 17:24:00
2        A 2016-02-17 09:12:00 2016-02-17 09:42:00
3        A 2016-02-17 09:55:00 2016-02-17 13:21:55
4        A 2016-02-17 12:42:00 2016-02-17 12:56:00
5        A 2016-02-17 13:02:00 2016-02-17 17:32:00
6        A 2016-02-17 17:44:00 2016-02-17 18:24:00
7        A 2016-02-18 07:59:00 2016-02-18 16:40:00
8        A 2016-02-18 16:53:00 2016-02-18 20:19:55
9        A 2016-02-19 05:44:05 2016-02-19 09:11:00
10       A 2016-02-19 09:27:00 2016-02-19 11:26:00
11       A 2016-02-19 12:28:00 2016-02-19 17:12:00
12       A 2016-02-20 08:44:00 2016-02-20 08:58:00
13       A 2016-02-20 09:16:00 2016-02-20 17:21:00

【讨论】:

感谢您提供解决问题的启动点。知道如何计算两个不同行的有效进入和有效退出之间的平均时间。在我的示例中,所有数据帧的退出索引 0 和入口索引 1 之间的差异以此类推 是的,我已经为此更新了我的解决方案,平均差异的精度大于您可以选择舍入与否的秒数。如果我的回答解决了您的问题,请考虑投票或接受我的回答。谢谢:) 谢谢。我最终使用了每位访客每天的平均值,但是如果没有您的解决方案,这将是不可能的

以上是关于技巧 Pandas 数据填充的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 使用技巧(二)

pandas如何实现缺失的行数据按上一行数据进行填充?

Pandas技巧:万能转格式轻松合并压缩数据,让数据分析更高效

Pandas不容错过的Pandas小技巧:万能转格式轻松合并压缩数据,让数据分析更高效

用 Pandas 数据框中的行填充嵌套字典

使用 Pandas 填充缺失的数据