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

     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']


有没有更好/更快的方法来做到这一点?

最佳答案

使用maskffill

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/

10-12 17:50
查看更多