python - 如何在 Pandas 数据框中以非常特定的方式处理特定值?

标签 python python-3.x pandas

我有一个看起来像这样的 Pandas 数据框:

     TIMESTAMP              TAIR
0    2011-06-01 00:00:00    24.3
1    2011-06-01 00:05:00    24.5
2    2011-06-01 00:10:00    24.2
3    2011-06-01 00:15:00    24.1
4    2011-06-01 00:20:00    24.2
5    2011-06-01 00:25:00    -999
6    2011-06-01 00:30:00    15.1
7    2011-06-01 00:35:00    -999
8    2011-06-01 00:40:00    13.9
9    2011-06-01 00:45:00    13.7

我需要用前面的值替换它来处理缺失值(任何小于 -990 的值)。因此,如果我正确地执行此操作,新数据框将如下所示:

     TIMESTAMP              TEMP
0    2011-06-01 00:00:00    24.3
1    2011-06-01 00:05:00    24.5
2    2011-06-01 00:10:00    24.2
3    2011-06-01 00:15:00    24.1
4    2011-06-01 00:20:00    24.2
5    2011-06-01 00:25:00    24.2
6    2011-06-01 00:30:00    15.1
7    2011-06-01 00:35:00    15.1
8    2011-06-01 00:40:00    13.9
9    2011-06-01 00:45:00    13.7

时间戳是日期时间数据类型。

我现在的做法是使用这样的 for 循环:

for index, row in df.iterrows():
    if row['TAIR'] < -990:
        data.loc[index, 'TAIR'] = data.loc[index-1, 'TAIR']

有更好/更快的方法吗?

最佳答案

使用掩码ffill:

df.assign(TAIR=df.TAIR.mask(df.TAIR.le(-999)).ffill())

             TIMESTAMP  TAIR
0  2011-06-01 00:00:00  24.3
1  2011-06-01 00:05:00  24.5
2  2011-06-01 00:10:00  24.2
3  2011-06-01 00:15:00  24.1
4  2011-06-01 00:20:00  24.2
5  2011-06-01 00:25:00  24.2
6  2011-06-01 00:30:00  15.1
7  2011-06-01 00:35:00  15.1
8  2011-06-01 00:40:00  13.9
9  2011-06-01 00:45:00  13.7

关于python - 如何在 Pandas 数据框中以非常特定的方式处理特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248704/

相关文章:

python - 如何有效地将 numpy 数组中的相应元素相乘?

python - 在*初始化后更改 defaultdict 的默认返回值

python-3.x - 由于调用者没有权限,从 S3 到 GCS 的 Google StorageTransfer 作业失败

mysql - 无法从变量插入表中的值

python - 查找以 1 分钟为间隔采样的 pandas 时间序列数据帧中的空白,并用新行填充空白

python - 计算矩阵中的距离 Pandas Python

python - 连接数据帧行并在键相同时匹配

python - 在 Cython 中使用 C 创建的一组列表比纯 Python 慢得多 - 为什么?

python - 获得完整功能引用堆栈的最简单方法?

python - QTableWidget像excel一样显示某些小数